在webBrowser加载页面时,暂停循环的最佳方法是什么?

时间:2011-11-24 13:45:14

标签: c# .net browser

我需要暂停循环,直到webbrowser完成页面加载。

 string[] lines = (string[]) Invoke((ReadLine)delegate
                {
                    return logins.Lines;
                });


 foreach (string line in lines) {
    //..         
     if (TryParseUserDetails(line, false, out data) {
       //...                                      
          wb.Navigate(url.Next());
    }
}

如何在继续循环之前等待wb页面加载?

我尝试使用polling-flags,在WebBrowserDocumentCompletedEventHandler回调函数中将变量设置为true。 然后:

wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
                            delegate(object sender2,
                                WebBrowserDocumentCompletedEventArgs args)
                            {

                             done = true;
                         });

// ..

  wb.Navigate(url.Next();
  while (!done)
   {

   }
   done = false;  

我正在寻找类似的东西:

wb.WaitForDone(); 

感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

为什么不在DocumentCompleted回调中简单地完成您想要的内容,如下所示:SO Question

答案 1 :(得分:1)

您可以尝试使用AutoResetEvent而不是boolean。像:

圈外:

AutoResetEvent evt = new AutoResetEvent(false);

然后是事件处理程序:

wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
                        delegate(object sender2,
                            WebBrowserDocumentCompletedEventArgs args)
                        {
                            evt.Set();
                        });

然后在循环中:

evt.WaitOne();