c# - ejemplo - el metodo asincrono carece de operadores await
método asíncrono con evento completo (1)
Uso .net 4.0 e intenté descubrir cómo usar el método async para esperar que el evento DocumentCompleted complete y devuelva el valor. Mi código original está arriba, ¿cómo puedo convertirlo en modelo async / await en este escenario?
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);
}
Por lo tanto, necesitamos un método que devuelva una tarea cuando se DocumentCompleted
evento DocumentCompleted
. Cada vez que lo necesite para un evento determinado, puede crear un método como este:
public static Task WhenDocumentCompleted(this WebBrowser browser)
{
var tcs = new TaskCompletionSource<bool>();
browser.DocumentCompleted += (s, args) => tcs.SetResult(true);
return tcs.Task;
}
Una vez que tienes eso, puedes usar:
await browser.WhenDocumentCompleted();