该函数应该获取 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;
}
此代码在创建任务的线程中(同步)运行任务。线程被阻塞,直到任务完成。
我试图获取 html,但出了点问题。我试过这个
string html = await webView21.ExecuteScriptAsync("document.documentElement.outerHTML");
但结果我得到了奇怪的文字
“\u003Chead> \u003Cmeta 字符集=“utf-8”> \u003Cmeta name="viewport" ...
如何解决这个问题?