我想停止执行我的代码,直到加载网站(我使用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
答案 0 :(得分:1)
您可以使用async / await并使用 TaskCompletionSource 代替 AutoResetEvent
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
webBrowser.DocumentCompleted += (sender1, e1) => tcs.TrySetResult(null);
webBrowser.Navigate("https://www.google.com/");
await tcs.Task;
答案 1 :(得分:0)
我使用了Invoke。但是Invoke是在另一个Thread中,在这种情况下是在System.Timers.Timer的Elapsed中
MethodInvoker invoke = delegate ()
{
webBrowser1.Navigate(url);
};
this.Invoke(invoke);
this.autoresetevent.WaitOne();
和
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.autoresetevent.Set();
}