长期读者,这里的第一次海报。
我的目标:能够在使用 WebBrowser 类时利用 async/await。由于 WebBrowser.Navigate(string url) 是一种异步方法,因此在触发 LoadComplete 事件之前无法检查 html 文档。
到目前为止,这是我的(工作)代码:
public class AsyncWebBrowser
{
protected WebBrowser m_WebBrowser;
private ManualResetEvent m_MRE = new ManualResetEvent(false);
public void SetBrowser(WebBrowser browser) {
this.m_WebBrowser = browser;
browser.LoadCompleted += new LoadCompletedEventHandler(WebBrowser_LoadCompleted);
}
public Task NavigateAsync(string url) {
Navigate(url);
return Task.Factory.StartNew((Action)(() => {
m_MRE.WaitOne();
m_MRE.Reset();
}));
}
public void Navigate(string url) {
m_WebBrowser.Navigate(new Uri(url));
}
void WebBrowser_LoadCompleted(object sender, NavigationEventArgs e) {
m_MRE.Set();
}
}
而上一堂课现在允许我使用以下内容:
public async void NavigateToGoogle() {
await browser.NavigateAsync("www.google.com");
//Do any necessary actions on google.com
}
但是,我想知道是否有更有效/更正确的方法来处理这个问题。具体来说,Task.Factory.CreateNew 带有阻塞的 ManualResetEvent。感谢您的输入!