在对象的构造函数中,我需要创建一个WPF mediaElement对象:
m_videoMedia = new MediaElement();
但是该类也可以从其他线程实例化,所以我需要使用
Dispatcher.Invoke(DispatcherPriority.Normal,
(Action)(() => { m_videoMedia = new MediaElement(); }));
但是如何在该构造函数中获得正确的调度程序实例:s
答案 0 :(得分:8)
您最有可能只使用Dispatcher.CurrentDispatcher。调用...
但是,如果由于某些原因不起作用,您可以让您的类接收对Dispatcher的引用作为其构造函数的一部分。只需在构建时从UI线程传入Dispatcher.CurrentDispatcher
。
答案 1 :(得分:5)
您可以从静态应用程序实例中获取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()
。