System.Windows.Forms.WebBrowser.Refresh mostrando página anterior
-
04-07-2019 - |
Pergunta
aplicativo Meus WinForms tem uma guia com um controle System.Windows.Forms.WebBrowser
. Existem vários controles que estabelecem propriedade .Url
do WebBrowser, e quando os repaints forma que chama o método .Refresh(WebBrowserRefreshOption.Completely)
do WebBrowser.
Ocasionalmente, no entanto, a forma fica repintado e o conteúdo WebBrowser não muda. Eu quebro na .Refresh( )
, eo .Url
é a URL anterior. O que está acontecendo?
De acordo com a MSDN :
Se você definir o valor da propriedade e, em seguida, recuperá-la imediatamente, novamente, o valor recuperado pode ser diferente do que o valor definido se o controle WebBrowser não teve tempo para carregar o novo documento.
Bem, não é que especial? Por que a espera não .Refresh( )
até que o controle tem "teve tempo para carregar o novo documento" antes que redesenha? Existe alguma maneira de forçar que isso aconteça?
Solução
A menos que você está fazendo algo muito especial, não faz sentido para forçar a WB para redesenhar propriamente dito. Uma vez que é o seu próprio controle e tem seu próprio punho, é bem capaz de repintar-se sempre que julgar necessário. Desde que você está forçando-o a pintar em um momento que é completamente fora de sincronia com o seu ReadyState, recebendo uma url "velho" é de se esperar.
Outras dicas
Tente adicionar um manipulador de eventos para o código que é executado quando os "DocumentCompleted" fogos de eventos. Em seguida, adicione o código de atualização lá. Existem alguns exemplos de código aqui no MSDN. Se você fazê-lo desta forma, você não vai perder tempo adivinhando se a página foi carregada, e pode continuar a processar assim que estiver pronto.