AJUDA COM ERRO BACKGROUND WORK

KERPLUNK 05/04/2017 00:25:16
#473041
Deixa ver se eu entendi: Você está usando o WebBrowser ou um client HTTP qualquer para baixar um HTML que é na verdade um WebService. Se for isso, amigo, tenho péssimas notícias pra você...
KURTGU 05/04/2017 08:21:57
#473045
Citação:

:
Deixa ver se eu entendi: Você está usando o WebBrowser ou um client HTTP qualquer para baixar um HTML que é na verdade um WebService. Se for isso, amigo, tenho péssimas notícias pra você...



Não vou explicar novamente é que ficou confuso mesmo nem eu entendi kkkk...

Tenho esta tela aonde tenho os pacientes com 2 tipos de status aguardando e agendado como na figura 1, ao clicar em imprimir agendamento, ele vai na pasta do .exe na pasta comprovante, la dentro criei uma pagina simples em html da forma que mostra na figura 3. Somente isso, fiz isso pois estava usando o word para criar o mesmo tipo de comprovante mais seguindo seu conselho vi que não poderia me prender ao office. Agora não sei se fiz da forma correta.

[txt-color=#e80000]FIGURA 1[/txt-color]


[txt-color=#e80000]FIGURA 2 AQUI AONDE ESTA EM BRANCO DEVERIA CARREGAR O ARQUIVO HTML PREENCHIDO.[/txt-color]


[txt-color=#e80000]FIGURA 3[/txt-color]

OCELOT 05/04/2017 09:10:13
#473048
Citação:

:
Ocelot não sei se esta correto usar o background work pra isto, exemplo tenho o meu webservice aonde faco todas as funções de um crud funciona perfeitamente da forma que precisava, comecei a usar o backgroundwork para exibir o que estava acontecendo e não deixando o sistema travado na hora da busca exemplo. quando estou listando os pacientes que estão aguardando agendamento faco todo o procedimento pelo background work. só não consigo entender o por que deste erro somente nesta tela, que nem background work tem kkkk, nesta tela simplesmente pego uma html que fiz e salvei na pasta do projeto e preencho exemplo com os dados que vem do form funcionava perfeitamente após eu adicionar esses background work que fica em outras telas esta apresentando isso.


Não importa que a tela tenha background worker, o que importa é a thread que está tentando manipular esta tela. Se você tenta exibir a tela de dentro do evento DoWork ela vai ser executada da Thread do BackgroundWorker e por isso o erro. Só que como se trata de Threads pode ser que as vezes funcione pode ser que as vezes não, e não tem como saber o porque exatamente pois ele não foi feito para ser usado por várias Threads e o uso dele assim tem comportamento indefinido, então as vezes funcionar e as vezes não é meio que o comportamento esperado, e funcionar em testes não significa que sempre vai funcionar, pode dar erro em um cliente especifico seu e você nunca encontrar o motivo.

Basicamente você pode usar as threads para chamar o webservice e fazer todas as operações que precisar, porém não deve em momento algum modificar ou exibir telas, de preferência não deve nem mesmo pegar dados das telas pois alguns controles vão ter problemas com isso, você deveria ter tudo separado antes de iniciar o background worker.

Se enquanto ele está rodando você precisa avisar o que está fazendo modificando a tela você pode fazer isso de duas formas, usar o ReportProgress do BackgroundWorker ou usar o método Invoke do Form, mas deve ser feito o mínimo possível por ser um processo um pouco lento.

Agora se o problema é só o WebService travando a execução por demorar um pouco para responder você deveria procurar como fazer as chamadas de forma assíncrona, pois assim a chamada ao WebService não trava o programa e não precisa de Threads.
KURTGU 05/04/2017 09:26:59
#473049
Ocelot teria como me ajudar com essa parte da chamada em forma assíncrona? ou me passar algo.

exemplo do meu login...De teste...não sei se estou fazendo da forma correta..

Dim servico As New THGService.Service
Dim Dados As New THGService.DadosUsuario()
servico.EfetuarLogin(txtusuario.Text, txtsenha.Text)
Dados = servico.EfetuarLogin(txtusuario.Text, txtsenha.Text)

If Dados.encontrouuser = True Then
msgbox([Ô]ENCONTRADO[Ô])
else
msgbox([Ô]NÃO ENCONTRADO[Ô])
end if

OCELOT 05/04/2017 11:47:58
#473056
Depende do que você está usando, qual a versão do .Net Framework do seu programa, versões diferentes do VS.Net também geram classes diferentes para acesso ao WebService, de que tipo de WebService é esse, se é Soap ou WebApi, existem diversos fatores, se estiver usando o .Net Framework 4.5 e VS.Net 2015 ou 2017 verifique se não existem um método chamado EfetuarLoginAsync Task, se sim é possível usar o Async/Await para fazer isso
KURTGU 05/04/2017 12:07:31
#473057
Citação:

:
Depende do que você está usando, qual a versão do .Net Framework do seu programa, versões diferentes do VS.Net também geram classes diferentes para acesso ao WebService, de que tipo de WebService é esse, se é Soap ou WebApi, existem diversos fatores, se estiver usando o .Net Framework 4.5 e VS.Net 2015 ou 2017 verifique se não existem um método chamado EfetuarLoginAsync Task, se sim é possível usar o Async/Await para fazer isso



Sim tem tem método chamado EfetuarLoginAsync agora EfetuarLoginAsync Task não...
Página 2 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas