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

Ber*_*ert 6 c# wpf dispatcher

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

m_videoMedia = new MediaElement();
Run Code Online (Sandbox Code Playgroud)

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

Dispatcher.Invoke(DispatcherPriority.Normal,
    (Action)(() => { m_videoMedia = new MediaElement(); })); 
Run Code Online (Sandbox Code Playgroud)

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

Ree*_*sey 9

您最有可能只使用Dispatcher.CurrentDispatcher .Invoke ...

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

  • 根据msdn,这将返回与当前线程关联的调度程序,并将创建一个尚未创建的新调度程序.在这种情况下,这听起来不像你想做的事情.您需要与UI关联的调度程序.或者更具体地说是特定窗口的调度程序. (8认同)

sin*_*law 5

正如这个答案所解释的:

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

您可能希望首先检查Application.Current空值,因为它可以在关闭序列期间清除.

此外,这是 Application类的文档.