C# await & Task.Run
本文关键字:Task Run amp await | 更新日期: 2023-09-27 18:07:07
private void button1_Click_1(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.naver.com");
}
private void button2_Click_1(object sender, EventArgs e)
{
HtmlWindow wf = webBrowser1.Document.Window.Frames[0];
string s = wf.Document.Body.OuterHtml;
MessageBox.Show(s);
}
. .这确实有效……但我需要点击两个按钮。我想把它们放在一起。我写了下面的代码…错误出现在第二行(nullReferenceException)。看来await不起作用有人能帮忙吗?
private async void button2_Click_1(object sender, EventArgs e)
{
await Task.Run(() => webBrowser1.Navigate("http://www.naver.com"));
HtmlWindow wf = webBrowser1.Document.Window.Frames[0];
string s = wf.Document.Body.OuterHtml;
MessageBox.Show(s);
}
导航开始下载。它在下载完成之前返回。你必须等待WebBrowser事件。documentcomplete事件
顺便说一下,因为导航不等待,直到加载它是快速的,没有必要异步调用它,否则微软会做一个异步版本,像在WebClient任务。
private void button2_Click_1(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.naver.com");
}
private void OnDocumentCompleted(object sender, ...)
{
HtmlWindow wf = webBrowser1.Document.Window.Frames[0];
string s = wf.Document.Body.OuterHtml;
MessageBox.Show(s);
}
如果您希望button2在button1事件上自动执行,那么您可以使用Button。PerformClick方法
所以,你的代码是这样的: private void button1_Click_1(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.naver.com");
button2.PerformClick();
}
private void button2_Click_1(object sender, EventArgs e)
{
HtmlWindow wf = webBrowser1.Document.Window.Frames[0];
string s = wf.Document.Body.OuterHtml;
MessageBox.Show(s);
}
如果你想一起工作,那么你可以使用Load事件
在Form Load上设置这些按钮点击事件public Form1()
{
InitializeComponent();
Load += button1_Click;
Load += button2_Click;;
}