7

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

m_videoMedia = new MediaElement();

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

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

但是我怎样才能在该构造函数中获得正确的调度程序实例:s

4

4 回答 4

10

您很可能只使用Dispatcher.CurrentDispatcher .Invoke...

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

于 2010-03-17T20:37:55.430 回答
6

如本答案所述

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

您可能需要先检查Application.Currentnull,因为它可以在关机序列期间被清除。

此外,这里是Application 类的文档。

于 2013-05-02T22:58:22.213 回答
2

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

于 2010-03-17T20:42:14.860 回答
-2

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

于 2013-02-21T10:04:15.020 回答