小编Sea*_*n S的帖子

异步/等待.NET的WebBrowser类的实现

长期读者,这里的第一次海报.

我的目标:在使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这个上一课现在允许我使用以下内容:

public async void NavigateToGoogle() {
    await browser.NavigateAsync("www.google.com");
    //Do any necessary actions on google.com
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有更有效/正确的方法来处理这个问题.具体来说,Task.Factory.CreateNew具有阻塞ManualResetEvent.感谢您的输入!

.net c# browser asynchronous async-await

14
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

async-await ×1

asynchronous ×1

browser ×1

c# ×1