2011-11-24 84 views
0

我需要暂停循环,直到webbrowser完成页面加载。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页面加载到之前继续循环?

我试过使用轮询标志,在WebBrowserDocumentCompletedEventHandler回调函数中设置一个变量为true。 然后:

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

          done = true; 
         }); 

// ..

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

    } 
    done = false; 

我在寻找类似:

wb.WaitForDone(); 

任何帮助表示赞赏。提前致谢。

回答

1

您可以尝试使用AutoResetEvent而不是布尔值。像:

外循环:

AutoResetEvent evt = new AutoResetEvent(false); 

然后事件处理程序:

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

,然后在循环:

evt.WaitOne(); 
+1

你可能想用类似这样的东西替换EventHandler:'wb.DocumentCompleted + =(o,args)=> evt.Set();' - 只是为了使它可读。 – ebb

1

为什么不简单地做你想在DocumentCompleted回调像这里所说的:SO Question

+0

我有很多的链接在接取webBrowser,我需要通过链接进行链接。 –

+0

当你真的需要这个都铎王朝的答案最符合你的需求。 – dasheddot

相关问题