Async/Await реализации класса WebBrowser для .NETC#

Место общения программистов C#
Ответить
Anonymous
 Async/Await реализации класса WebBrowser для .NET

Сообщение Anonymous »

Моя цель: иметь возможность воспользоваться Async/ждать при использовании класса WebBrowser. Поскольку webbrowser.navigate (string url) является асинхронным методом, и вы не можете проверить документ HTML до тех пор, пока событие LoadComplete не будет запущено.

Код: Выделить всё

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();
}
}
< /code>
И этот предыдущий класс теперь позволяет мне использовать следующее: < /p>
public async void NavigateToGoogle() {
await browser.NavigateAsync("www.google.com");
//Do any necessary actions on google.com
}
Однако мне интересно, есть ли более эффективный/правильный способ обработки этого. В частности, task.factory.createNew с блокировкой ManualResetEvent .

Подробнее здесь: https://stackoverflow.com/questions/861 ... ss-for-net
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»