2014-12-30 56 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,然后检查就绪状态。当您有框架并且使用ReadyState混乱时,DocumentComplete会使用表单多次触发。

我对使用WebBrowser的机器人所做的工作是当我为实际页面拥有文档完整状态时激活一个计时器,然后抓取队列中的下一个项目,以便在完成后1秒内处理该页面。 (当然总是关闭OnTick事件中的定时器。)

我写了一个队列,它将一组任务组合在一起,在这里我可以排列优先级和删除任何项目,所以我不重复任务但只执行当DocumentCompleted e.url == webBrowser.url和我的ReadyState完成时。