webview2 - 多线程下InvokeRequired始终为 false
现象
InvokeRequired
始终为false
导致无法更新UI
代码
- 开发ppt插件的时候,下载文件肯定不能卡住UI线程,一般都会采用代理实现
- 代码也是普通的,这里就不详细写了
private void SendDownloadInfo(int count, string[] filenames)
{
if (InvokeRequired)
{
// 通知前端下载状态
foreach (var file in filenames)
{
// do something
}
}
}
但是实际使用的时候发现 InvokeRequired
始终为false
, 这时候使用任何UI线程相关都会提示只能在UI线程操作
解决
- 设置代理的位置不正确
- 对于webview2 设置代理的时机要在
CoreWebView2InitializationCompleted
事件触发后 - 即便设置在
await _collection.webView21.EnsureCoreWebView2Async(env);
之后 也不行
// 设置WebView2初始化完成事件
webView21.CoreWebView2InitializationCompleted += webView_CoreWebView2InitializationCompleted
// --------------------- //
private void webView_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
// 挂载下载的代理
DownloadHelper2.UpdateUIDelegate += SendDownloadInfo;
// 代理完成回调
//DownLoadHelper.CollectionTaskCallBack += Accomplish;
}
由于时间关系,真正的原因后面再细挖, 先搬砖了