我在这里阅读了几篇帖子并通过谷歌的推荐,但还没有找到合适的解决方案。
我有一个显示对话框的程序集,但该对话框需要从主线程显示。调用者可以是.NET应用程序或本机应用程序。
从概念上讲,似乎我只需要获取应用程序的主线程ID,然后调用System.Windows.Threading.Dispatcher.FromThread( main_thread_id_here)
来获取Dispatcher,然后调用Invoke
从主线程显示我的对话框。但是,我无法弄清楚如何获取主线程ID。
我的下一个方法是(根据另一个SO问题的建议)迭代Process.GetCurrentProcess().Threads
,并获取首先启动的ProcessThread
的线程ID。但是现在我有了这个ProcessThread
,我没办法得到相应的Thread
对象。我想我接下来可以获得当前进程中所有正在运行的.NET线程的列表,并通过GetHashCode
比较它们的线程ID,以确定哪一个是主线程。然后我可以使用FromThread
来获取Dispatcher
...但我无法找到除ProcessThreads
之外的任何其他信息!
有没有人有关于如何使用我上面解释过的方法解决这个问题的提示,或者可能是另一种方法?请记住,我无法控制通话应用程序。
答案 0 :(得分:2)
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
// Show dialog
}));
您也可以从Window.Dispatcher
属性中获取调度程序。