如何获取UI线程的Dispatcher?

时间:2010-04-18 16:54:40

标签: wpf multithreading dispatcher

当您没有引用任何UI元素时,有没有办法获取UI线程的Dispatcher

2 个答案:

答案 0 :(得分:91)

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

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

答案 1 :(得分:0)

当在恰好也在使用WPF的WinForms应用程序中使用以下代码时(对我而言,Esri的Arcmap.exe)

private System.Windows.Threading.Dispatcher Dispatcher { get; set; }

// I put this in my view model constructor as it MUST be called from UI thread
Dispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher;

每次打开新的WPF窗口然后将其关闭时,另一种方法(涉及调用new System.Windows.Application()来填充System.Windows.Application.Current)对我来说都是问题。这不仅使System.Windows.Application.Current无效,而且由于它们的InitializeComponents()方法,我无法再打开新窗口,但都失败了:

  

System.InvalidOperationException:'应用程序对象正在   关闭。”

到目前为止,新解决方案在没有这些副作用的情况下就可以正常工作。