C# 你知道一个简单而快捷的方法来实现这一点吗?

C# 你知道一个简单而快捷的方法来实现这一点吗?,c#,async-await,webbrowser-control,C#,Async Await,Webbrowser Control,错误显示为“指定的转换无效”我了解到了这一点,因为它是另一个线程而不是ui线程,您知道一种简单快捷的方法来实现这一点吗?Edit 您必须订阅webBrowser.DocumentCompleted事件 webBrowser.DocumentCompleted+=已完成; 私有无效已完成(对象发送方,WebBrowserDocumentCompletedEventArgs e) { if(发送方为网络浏览器w) { var a=w.Document.GetElementsByTagName(“正文

错误显示为“指定的转换无效”我了解到了这一点,因为它是另一个线程而不是ui线程,您知道一种简单快捷的方法来实现这一点吗?

Edit 您必须订阅webBrowser.DocumentCompleted事件

webBrowser.DocumentCompleted+=已完成;
私有无效已完成(对象发送方,WebBrowserDocumentCompletedEventArgs e)
{
if(发送方为网络浏览器w)
{
var a=w.Document.GetElementsByTagName(“正文”)[0].InnerHtml;
}
}
私有异步无效按钮下载\单击(对象发送方,事件参数e){
webBrowser.Navigate(url);
}
我会像这样重写您的下载方法(我假设webBrowser对象正在进行一些“长”计算,您不想阻塞UI线程)

private async void按钮下载\单击(对象发送方,事件参数e)
{
var htmlString=等待任务。运行(()=>{
返回webBrowser.Document.GetElementsByTagName(“正文”)[0].InnerHtml;
});
MessageBox.Show(htmlString);
}

另外,您确定这是正确的错误吗?也许你忽略了一些内部异常,这可以解释更多的原因,谢谢你的回答,不幸的是,这不起作用,我必须补充的问题是,我已经像这样声明了webBrowser。public webBrowser webBrowser=new webBrowser();好的,做了一些调查。试试这个:
WebBrowser w=newwebbrowser();w、 导航(“www.google.com”);w、 DocumentCompleted+=(对象发送者,WebBrowserDocumentCompletedEventArgs e)=>{var a=w.Document.GetElementsByTagName(“正文”)[0]。InnerHtml;}基本上,当文档完成时,我会调用一个点击按钮,然后按钮的动作会通过ajax显示新的html代码,我希望得到该响应,而DocumentCompleted无法处理该响应,因为ajax从未刷新页面,因此,使用await.task.run时一定是这样,但它不起作用。请删除该任务。当文档完成时(即,当引发
DocumentCompleted
并且
webBrowser.ReadyState==WebBrowserReadyState.Complete
),您可以只读取
webBrowser.Document.Body.InnerHtml
。运行任务并不是您想要的,而且,所有内容都已经存在。但是,请阅读此处的注释:与问题没有直接关系,但您可能会发现这很有帮助:基本上,当文档完成时,我会单击按钮,然后按钮的动作将通过ajax显示新的html代码,我希望得到响应,而这个响应不能由DocumentCompleted处理,因为ajax从来不会刷新页面,所以必须类似于使用await.task.run,但它不起作用。
 private void Form1_Load(object sender, EventArgs e)
{
  webbrowser.Navigate(url);
}
 private async void buttonDownload_Click(object sender, EventArgs e)
 {
      await Task.Run(()=> {
                MessageBox.Show(webBrowser.Document.GetElementsByTagName("body")[0].InnerHtml);
            });
}