How do I get the UI thread's Dispatcher?

社会主义新天地 提交于 2020-02-09 08:57:04

问题


Is there any way to get the UI thread's Dispatcher when you have no reference to any UI elements?


回答1:


You can grab the UI Dispatcher from the static application instance: Application.Current.Dispatcher

You may want to check Application.Current for null first, as it can be cleared during a shutdown sequence.




回答2:


The following works much better for me when being used in a WinForms application that happens to be also using WPF (in my case Esri's 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;

The other method (which involved calling new System.Windows.Application() to populate System.Windows.Application.Current) caused issues for me every time I opened a new WPF window and then closed it. Not only did this null out System.Windows.Application.Current, but I could no longer open up new windows as their InitializeComponents() methods, all failed with:

System.InvalidOperationException: 'The Application object is being shut down.'

So far the new solution is working without those side effects.



来源:https://stackoverflow.com/questions/2663070/how-do-i-get-the-ui-threads-dispatcher

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!