获取主应用程序的线程ID

时间:2011-08-24 15:39:54

标签: wpf multithreading .net-4.0 process dispatcher

我在这里阅读了几篇帖子并通过谷歌的推荐,但还没有找到合适的解决方案。

我有一个显示对话框的程序集,但该对话框需要从主线程显示。调用者可以是.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之外的任何其他信息!

有没有人有关于如何使用我上面解释过的方法解决这个问题的提示,或者可能是另一种方法?请记住,我无法控制通话应用程序。

1 个答案:

答案 0 :(得分:2)

Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
    // Show dialog
}));

您也可以从Window.Dispatcher属性中获取调度程序。