函数应该得到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;
}
这段代码在创建任务的线程中(同步)运行任务。线程被阻塞,直到任务完成。