【发布时间】:2017-08-31 02:18:54
【问题描述】:
我想在网站加载之前停止执行我的代码(我使用 Windows.Forms.WebBrowser)。我读到我应该使用 AutoResetEvent,但我之前没有使用任何与线程相关的类。我写了这段代码,但它只会冻结我的程序,如何修复它?
var evt = new AutoResetEvent(false);
webBrowser.DocumentCompleted += (sender1, e1) =>
{
if (webBrowser.ReadyState == WebBrowserReadyState.Complete)
{
evt.Set();
}
};
webBrowser.Navigate("https://www.google.com/");
evt.WaitOne(); //wait to evt.Set() call
//...
//further code
【问题讨论】:
-
为什么不将 WaitOne 之后的代码移动到 DocumentCompleted 事件处理程序中??
-
DocumentCompleted 事件只能在您的 UI 线程空闲时触发。它不是空闲的,它卡在 WaitOne() 调用上。这称为死锁。 从不阻塞 UI 线程。只需将 WaitOne 调用后的代码移动到 DocumentCompleted 事件处理程序中即可。