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

时间:2014-02-14 01:54:31

标签: 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.
      }
    }
    
  • 您可以使用任何代码中的Application.Current.Dispatcher

获取Dispatcher的推荐做法是什么?

1 个答案:

答案 0 :(得分:2)

不要依赖于UI线程上的MEF编写。如果它现在适合你,你就是幸运的。 MEF本质上也是延迟的,充满了懒惰,所以如果你碰巧在后台线程中意识到它,整个子图将在后台实现。

我会使用#1或#3(无论哪个,只有一个UI线程调度程序,无论你怎么做到这一点都无关紧要。)