2014-12-30 3 views
1

Я пытаюсь заставить мой WebBrowser дождаться загрузки страницы, а затем перейти к следующему шагу. Я исследую, как это сделать, но мой код продолжает работать до загрузки страницы.C# создание WebBrowser дождитесь загрузки страницы

private void AdobeConnect_Load(object sender, EventArgs e) 
    { 
     for (int x = 1; x <= 3; x++) 
     { 
      while (acBrwsr.ReadyState != WebBrowserReadyState.Complete) 
      { 
       Application.DoEvents(); 
      } 
      adobeStepper(x); 
     } 
    } 
+1

Вы не можете просто ждать завершения мероприятия? –

+0

'WebBrowser' действительно предоставляет событие' Completed'. –

+0

Событие «WebBrowser.DocumentCompleted» –

ответ

1

Проблема в том, что вы полагаетесь на ReadyState, и вас не должно быть. В WebBrowser.DocumentComplete вам нужно проверить e.Url == WebBrowser.Url, а затем проверить состояние готовности. DocumentComplete срабатывает несколько раз с помощью форм, когда у вас есть фреймы, и это бесполезно с ReadyState.

Что я делаю с моими ботами, использующими WebBrowser, я активирую таймер, когда у меня есть полное состояние документа для фактической страницы, а затем возьмите мой следующий элемент в очереди для обработки этой страницы, как через 1 секунду после завершения. (Конечно, всегда выключайте таймер в событии OnTick.)

Я написал очередь, которая группирует набор задач вместе, где я могу назначать приоритеты и удалять любые элементы, такие как список, поэтому я не повторяю задачи, но выполняю когда DocumentCompleted e.url == webBrowser.url и моя ReadyState завершены.

Смежные вопросы