当您没有引用任何UI元素时,有没有办法获取UI线程的Dispatcher
?
答案 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:'应用程序对象正在 关闭。”
到目前为止,新解决方案在没有这些副作用的情况下就可以正常工作。