我应该在 Visual Studio 2010+ 扩展中使用什么 Dispatcher 进行 UI 操作

Sam*_*ell 6 dispatcher vsix

目前我知道以下Dispatcher对象。

  • 如果您有文本视图,则可以使用IWpfTextView.VisualElement.Dispatcher.

  • 如果您的类是由 MEF 构造的(用[Export]您自己的代码标记而不是直接从您自己的代码构造),那么您可以使用 MEF 部分解析算法和构造发生在 UI 线程上的事实,允许使用Dispatcher.CurrentDispatcher. 例如:

    [Export(typeof(ISomeInterface))]
    public class MyClass : ISomeInterface {
      private readonly Dispatcher _dispatcher;
    
      public MyClass() {
        _dispatcher = Dispatcher.CurrentDispatcher.
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 您可以Application.Current.Dispatcher从任何代码使用。

如果有的话,获得一个的推荐做法是Dispatcher什么?

Kir*_*kov 2

不要依赖 UI 线程上的 MEF 组合。如果它现在对你有用,那你就很幸运了。而且MEF本质上是延迟的并且充满了Lazy,所以如果你碰巧在后台线程上实现它,整个子图将在后台实现。

我会使用 #1 或 #3(无论哪一个,都只有一个 UI 线程调度程序,无论您如何到达它)。