在一个线程中获得正确的WPF调度程序

时间:2010-03-17 20:25:51

标签: c# wpf dispatcher

在对象的构造函数中,我需要创建一个WPF mediaElement对象:

m_videoMedia = new MediaElement();

但是该类也可以从其他线程实例化,所以我需要使用

Dispatcher.Invoke(DispatcherPriority.Normal,
    (Action)(() => { m_videoMedia = new MediaElement(); })); 

但是如何在该构造函数中获得正确的调度程序实例:s

4 个答案:

答案 0 :(得分:8)

您最有可能只使用Dispatcher.CurrentDispatcher。调用...

但是,如果由于某些原因不起作用,您可以让您的类接收对Dispatcher的引用作为其构造函数的一部分。只需在构建时从UI线程传入Dispatcher.CurrentDispatcher

答案 1 :(得分:5)

As explained in this answer

  

您可以从静态应用程序实例中获取UI Dispatcher:   Application.Current.Dispatcher

     

您可能希望首先检查Application.Current是否为null   在关机序列中清除。

此外,Application类的here are the docs

答案 2 :(得分:2)

大多数WPF控件派生自DispatcherObject,它具有您需要的Dispatcher属性。所以基本上你会使用你想要使用的控件中的调度程序。在这种情况下,例如,添加MediaElement的窗口。

答案 3 :(得分:-1)

如果您将System.Windows.Forms的引用添加到项目中,则可以继续在WPF中使用Application.DoEvents()