当我尝试读取加载到webview2控件中的某个网页的内容时,任务ExecuteScriptAsync永久阻塞。此后,应用程序没有响应,但站点仍在运行。该站点发布在公司的Intranet上,因此我无法在此处提供URL。它是Ivanti Service Desk。
private void bnNewReguest_Click(object sender, EventArgs e)
{
var t = GetTextAsync();
string sHtml = t.Result;
if (!sHtml.Contains("shortcutItem_12345"))
{
MessageBox.Show("Please wait for the page to load");
return;
}
webView21.ExecuteScriptAsync("document.getElementById('shortcutItem_12345').click()");
}
private async Task<string> GetTextAsync()
{
if (webView21.CoreWebView2 == null)
{
MessageBox.Show("Wait a moment...");
return "";
}
var script = "document.documentElement.outerHTML";
string sHtml = await webView21.CoreWebView2.ExecuteScriptAsync(script); // deadlock
string sHtmlDecoded = System.Text.RegularExpressions.Regex.Unescape(sHtml);
return sHtmlDecoded;
}
我也尝试了下面的代码,但结果是类似的。
string sHtml = await webView21.CoreWebView2.ExecuteScriptAsync(script).ConfigureAwait(false);
WebView2版本是1.0.1418.22。如何防止死锁?我发现了一个关于here相同问题的线程,但没有一个解决方案对我有效。
1条答案
按热度按时间yxyvkwin1#
我描述了这个死锁on my blog。最好的解决方案是不阻塞异步代码。
在您的情况下,可能如下所示: