【问题标题】:How to resolve VS2019 warning to use `JoinableTaskFactory.SwitchToMainThreadAsync()` instead of Invoke / BeginInvoke?如何解决 VS2019 警告以使用`JoinableTaskFactory.SwitchToMainThreadAsync()` 而不是 Invoke / BeginInvoke?
【发布时间】:2019-10-04 13:56:42
【问题描述】:

如果我使用

Application.Current.Dispatcher.BeginInvoke(new Action(() => { /*UI code here*/ }));

在 WPF 项目中,Visual Studio 2019 给我警告 VSTHRD001:

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

我该如何实施这个建议?

【问题讨论】:

标签: .net wpf visual-studio


【解决方案1】:

here。你应该用这个替换对BeginInvoke的调用:

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

【讨论】:

  • ThreadHelper 来自 Microsoft.VisualStudio.Shell 命名空间。是安装扩展 SDK 的唯一方法吗?
  • @geometrikal:是的。这是一个问题还是一个观察?
  • 没有那个包有没有办法做到这一点?
  • @geometrikal:当然,您需要JoinableTaskFactory 的实际实现才能使用它。
  • 我同意将用于一般用途的东西放在 Microsoft.VisualStudio.Shell 中而不是 System.Threading.Tasks 中并不直观。但这似乎是recommended pattern
猜你喜欢
  • 2020-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 2013-04-29
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多