完成事件的异步方法

我使用.net 4.0,我试图弄清楚如何使用异步方法来等待DocumentCompleted事件完成并返回值。 我的原始代码在上面,如何在这种情况下将其转换为异步/等待模型?

private class BrowserWindow { private bool webBrowserReady = false; public string content = ""; public void Navigate(string url) { xxx browser = new xxx(); browser.DocumentCompleted += new EventHandler(wb_DocumentCompleted); webBrowserReady = false; browser.CreateControl(); if (browser.IsHandleCreated) browser.Navigate(url); while (!webBrowserReady) { //Application.DoEvents(); >> replace it with async/await } } private void wb_DocumentCompleted(object sender, EventArgs e) { try { ... webBrowserReady = true; content = browser.Document.Body.InnerHtml; } catch { } } public delegate string AsyncMethodCaller(string url); } 

因此,我们需要一个在DocumentCompleted事件触发时返回任务的方法。 无论何时您需要为给定的事件,您可以创建这样的方法:

 public static Task WhenDocumentCompleted(this WebBrowser browser) { var tcs = new TaskCompletionSource(); browser.DocumentCompleted += (s, args) => tcs.SetResult(true); return tcs.Task; } 

一旦你有了,你可以使用:

 await browser.WhenDocumentCompleted();