System.Windows.Forms.WebBrowser.Refresh, показывающий предыдущую страницу - PullRequest
0 голосов
/ 25 октября 2008

В моем приложении WinForms есть вкладка с элементом управления System.Windows.Forms.WebBrowser. Существует несколько элементов управления, которые устанавливают свойство .Url WebBrowser, и когда форма перерисовывается, она вызывает метод .Refresh(WebBrowserRefreshOption.Completely) WebBrowser.

Иногда, однако, форма перекрашивается, и содержимое WebBrowser не изменяется. Я ломаю на .Refresh( ), а .Url - это предыдущий URL. Что происходит?

Согласно MSDN :

Если вы установите значение этого свойства, а затем сразу же получите его снова, полученное значение может отличаться от установленного значения, если элемент управления WebBrowser не успел загрузить новый документ.

Ну разве это не особенное? Почему .Refresh( ) не ждет, пока элемент управления "успеет загрузить новый документ", прежде чем перерисовать его? Есть ли способ заставить это произойти?

Ответы [ 2 ]

4 голосов
/ 25 октября 2008

Если вы не делаете что-то особенное, нет смысла заставлять ВБ перекрашивать себя. Поскольку он имеет свой собственный контроль и имеет свой собственный дескриптор, он вполне способен перекрашивать себя всякий раз, когда сочтет это необходимым. Поскольку вы заставляете его перерисовывать в тот момент, когда он полностью не синхронизирован с его ReadyState, следует ожидать получения «старого» URL.

1 голос
/ 25 октября 2008

Попробуйте добавить обработчик событий в ваш код, который запускается при возникновении события «DocumentCompleted». Затем добавьте туда свой код обновления. Здесь есть несколько примеров кода в MSDN. Если вы сделаете это таким образом, вы не потеряете время на угадывание загрузки страницы и сможете продолжить обработку, как только она будет готова.

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

...