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?

Foi útil?

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.

http://msdn.microsoft .com / en-us / library / system.windows.forms.webbrowser.documentcompleted.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top