webBrowser加载页面时暂停循环的最佳方式是什么?
问题描述:
我需要暂停循环,直到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();
任何帮助表示赞赏。提前致谢。
答
您可以尝试使用AutoResetEvent而不是布尔值。像:
外循环:
AutoResetEvent evt = new AutoResetEvent(false);
然后事件处理程序:
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
delegate(object sender2,
WebBrowserDocumentCompletedEventArgs args)
{
evt.Set();
});
,然后在循环:
evt.WaitOne();
答
为什么不简单地做你想在DocumentCompleted
回调像这里所说的:SO Question?
+0
我有很多的链接在接取webBrowser,我需要通过链接进行链接。 –
+0
当你真的需要这个都铎王朝的答案最符合你的需求。 – dasheddot
你可能想用类似这样的东西替换EventHandler:'wb.DocumentCompleted + =(o,args)=> evt.Set();' - 只是为了使它可读。 – ebb