在线程中获取WebView2的HTML文档

问题描述 投票:0回答:2

该函数应该获取 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
  }
}
c# asynchronous thread-safety task webview2
2个回答
2
投票

您想同步运行任务吗?将

GetHtmlDocument
的返回类型更改为
Task<string>
并在方法
Work
中使用此代码:

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

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


0
投票

我试图获取 html,但出了点问题。我试过这个

string html = await webView21.ExecuteScriptAsync("document.documentElement.outerHTML");

但结果我得到了奇怪的文字

“\u003Chead> \u003Cmeta 字符集=“utf-8”> \u003Cmeta name="viewport" ...

如何解决这个问题?

© www.soinside.com 2019 - 2024. All rights reserved.