如何解决 VS2019 警告使用 `JoinableTaskFactory.SwitchToMainThreadAsync()` 而不是 Invoke / BeginInvoke?

geo*_*kal 5 .net wpf visual-studio

如果我使用

Application.Current.Dispatcher.BeginInvoke(new Action(() => { /*UI code here*/ }));
Run Code Online (Sandbox Code Playgroud)

在 WPF 项目中,Visual Studio 2019 向我发出警告 VSTHRD001:

等待 JoinableTaskFactory.SwitchToMainThreadAsync() 切换到 UI 线程,而不是可能死锁或需要指定优先级的 API。

我该如何实施这个建议?

mm8*_*mm8 5

这里。您应该将调用替换BeginInvoke为:

Microsoft.VisualStudio.Shell.ThreadHelper.JoinableTaskFactory.Run(async delegate {
    await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
    /*UI code here*/
});
Run Code Online (Sandbox Code Playgroud)

  • ThreadHelper 来自 Microsoft.VisualStudio.Shell 命名空间。安装扩展SDK是唯一的方法吗? (2认同)
  • 我同意,对于一般用途的东西来说,放在 Microsoft.VisualStudio.Shell 中而不是 System.Threading.Tasks 中是不直观的。但这似乎确实是[推荐模式](https://github.com/microsoft/vs-threading/issues/447#issuecomment-481481389)。 (2认同)