WEBBRAUSER TRAVANDO
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 ?
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
Demorar uma pagina depende de muitas coisas
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.
tutorialzinho bem simples e eficiente
http://www.macoratti.net/vbn5_ept.htm
http://www.macoratti.net/vbn5_ept.htm
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
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
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
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
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
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
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
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
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
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 ?
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
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