在线程中获取WebView2的HTML文档



函数应该得到HTML文档,在线程上工作。ExecuteScriptAsync需要管理一个任务,如果我在一个单独的线程上运行它,会导致执行错误。我不知道如何获得同步的HTML内容。哪个是最佳实践解决方案?

Thread thread = new Thread(() => Work());
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
protected void Work()
{
// ...
GetHtmlDocument();
// ...
}
protected string GetHtmlDocument()
{
if (webBrowserEdge.InvokeRequired)
{
return (string)webBrowserEdge.Invoke(
new Func<String>(() => GetHtmlDocument())
);
}
else
{
string script = "document.documentElement.outerHTML";
return webBrowserEdge.ExecuteScriptAsync(script); // compilation error
}
}

要同步运行任务?将GetHtmlDocument的返回类型改为Task<string>,并在方法Work中使用此代码:

using (var task = GetHtmlDocument()) {
task.RunSynchronously();
string htmlDocument = task.Result;
}

这段代码在创建任务的线程中(同步)运行任务。线程被阻塞,直到任务完成。