Недавно писал парсер адресов электронной почты с mail.ru (социальная сеть мой мир), и столкнулся с одной проблемой – у компонента WebBrowser есть событие DocumentCompleted, которое должно вызываться после загрузки документа, однако это оказалось не совсем так.
Как выяснилось, это событие возникает несколько раз при загрузке страницы, причем зачастую на самом деле еще ничего реально загружено не было, и мое приложение падало с ошибками.
Как выяснилось, у WebBrowser есть свойство ReadyState, которое может принимать несколько различных значений:
WebBrowserReadyState.Uninitialized – страница не загружена
WebBrowserReadyState.Interactive – страница загружена достаточно для взаимодействия с пользователем (например он может кликать по ссылкам)
WebBrowserReadyState.Loading – страница в процессе загрузки
WebBrowserReadyState.Loaded – документ уже инициализирован, но загружен не полностью
WebBrowserReadyState.Completed - загружена вся страница полностью, включая графику.
Вот это самое последнее значение нас и интересует. Приведем фрагмент кода, который следует поместить в обработчик события DocumentCompleted, чтобы дождаться полной загрузки страницы:
|
1 2 3 |
while (webBrowser1.ReadyState != WebBrowserReadyState.Completed) { Application.DoEvents(); } |
Вот и все. Теперь ваш WebBrowser работает синхронно)