WEBBRAUSER TRAVANDO

EBOOKREVENDA 10/03/2015 02:33:55
#445107
Olá, estou desenvolvendo um webbraunser VB porem o mesmo ao visitar alguns sites trava totalmente por exemplo a pagina www.rendafrpromotora.com/formulario-para-contato/ ela demora bastante para carregar creio que seja por isso que trava o form, alguem tem alguma solução para isso ?
NICKOSOFT 10/03/2015 06:43:00
#445111
Resposta escolhida
Se o processo é longo, pesado, o melhor é usar um backgroundwork pra fazer, assim a interface fica livre e operando normal enquanto o processo é feito em uma thread de segundo plano separada
Demorar uma pagina depende de muitas coisas
EBOOKREVENDA 10/03/2015 13:01:17
#445127
NICKOSOFT poderia me dar uma dica de como fazer isso ? minha aplicação é simples ela simplesmente abre a pagina no webbrauser tipo webbrauser1.navegate([Ô]url...[Ô]) como eu utilizaria o backgroundwork não conheço essa função ou método, fico grato dês-de-já pela luz.
NICKOSOFT 10/03/2015 13:36:10
#445130
tutorialzinho bem simples e eficiente
http://www.macoratti.net/vbn5_ept.htm
EBOOKREVENDA 10/03/2015 14:22:35
#445131
NICKOSOFT, usando o tutorial baseado no que preciso fiz o seguinte abaixo porem mesmo abrindo o webbrauser em segundo plano como citado continua travando o aplicativo pelo tutorial o que aprendi foi isso, estaria correto ?


Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
[ô] ----- O trabalho em segundo plano (background) começa aqui
Dim segundoPlano As BackgroundWorker

[ô] ----- Chama a thread em segundo plano (background)
segundoPlano = CType(sender, BackgroundWorker)
WebBrowser2.Navigate([Ô]www.rendafrpromotora.com/formulario-para-contato/[Ô])

[ô] ----- Verifica cancelamento
If (segundoPlano.CancellationPending = True) Then e.Cancel = True
End Sub


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
NICKOSOFT 10/03/2015 20:21:55
#445136
testei clicando no botão e ai comecei a arrastar a janela pela barra de titulo por toda a tela, passou o tempo, carregou sem travar
  
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
[ô] ----- O trabalho em segundo plano (background) começa aqui
Dim segundoPlano As BackgroundWorker

[ô] ----- Chama a thread em segundo plano (background)
segundoPlano = CType(sender, BackgroundWorker)
executaTrabalho(segundoPlano)

[ô] ----- Verifica cancelamento
If (segundoPlano.CancellationPending = True) Then e.Cancel = True
End Sub

Private Sub executaTrabalho(ByVal processoAtivo As BackgroundWorker)
[ô] ----- Realiza algum trabalho
WebBrowser1.Navigate([Ô]www.rendafrpromotora.com/formulario-para-contato/[Ô])
End Sub
EBOOKREVENDA 11/03/2015 11:39:49
#445149
Dei uma limpada no codigo creio que o que eu precise é somente isso para executar a Thread porem aqui trava tudo logo apos alguns segundos que o site fica carregando o Form trava totalmente e ai aparece a mensagem do navegador [Ô]Falta de memoria na linha 1[Ô] como se o carregamento da pagina tivesse gerando um grande fluxo e não parasse de carregar, Teria alguma forma de cancelar o carregamento da pagina já que o codigo abaixo não resolveu meu problema ? ou ate mesmo reiniciar o programa caso ele trave ?

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
WebBrowser2.Navigate([Ô]www.rendafrpromotora.com/formulario-para-contato/[Ô])
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
EBOOKREVENDA 11/03/2015 12:05:06
#445151
Acheeeeeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii kkkkkk A solução que encontrei foi a seguinte, coloquei uma função chamada Application.DoEvents() dentro do webbrauser2 enquanto ele não estiver totalmente carregado se não me engano ao invez de travar o form essa função permite que o windows continue executando outras tarefas e não se atenha apenas ao carregamento da pagina... Muito obrigado NICKOSOFT pela ajuda.

Private Sub WebBrowser2_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser2.DocumentCompleted
While WebBrowser2.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End Whil
End Sub
NICKOSOFT 11/03/2015 15:09:33
#445155
na verdade isso não gera uma segunda tarefa não, a segunda tarefa ou vc faz com o backgroundworker ou thread mesmo....
exatamente como eu postei o código não travou nada aqui......
ele cuidou do carregamento do browser no segundo plano.....
da erro no seu pq vc tem q chamar uma função e não por o q quer q faca dentro do dowork, onde esta o retorno pro componente dar como concluída a tarefa, onde vc interpreta o cancelamento? por isso o dowork chama a função q realmente faz o trabalho.....essa retorna qnd concluído/cancelado pra finalizar a tarefa e mostrar resultado
EBOOKREVENDA 13/03/2015 03:04:26
#445192
NICKOSOFT resolvi o problema daquela forma não sei bem como e nem porque mais deu certo. Agora veja só outro problema, quando eu tento abrir o seguinte site: http://www.usertecnologia.com.br/contato.php o form para de funcionar e tem que ser fechado saberia me dizer por que ?
NICKOSOFT 13/03/2015 06:37:32
#445194
Nao sei, pode ser a forma q usou, o doevents realmente nao é algo eficiente qnd o processo é pesado
O q pode tentar usar junto ao doevents pra um alivio no form seria um thread.sleep(200) e um me.refresh
Vc cria uma pausa no processamento por 200 mili segundos, e atualiza o form, veja q vai causar maior demora, e precisaria conferir constantemente o evento documentcompleted, pq esse evento nao é consultado, ele dispara uma vez apenas qnd completa o carregamento da pagina, por isso de nao ser realmente eficiente, vc so libera e atualiza qnd ele terminar de abrir a pagina, enquanto isso fica como vc disse, travado
Ainda confio muito mais em usar o backgroundwork, e nao vi qq problema no codigo completo q postei
Tópico encerrado , respostas não são mais permitidas