引用 C# 中的主线程

Posted

技术标签:

【中文标题】引用 C# 中的主线程【英文标题】:Reference to main thread in C# 【发布时间】:2011-06-18 05:43:25 【问题描述】:

如何从 C# 中的另一个线程获取对主线程的引用?

为什么需要这个?以加载到控制台应用程序的程序集为例。该程序集引发了另一个线程,该线程希望在控制台应用程序的主线程上等待(加入)。它将如何做到这一点?

我是这样想的:在 Visual Studio 2010 中,您可以在调试时检查线程信息。线程窗口中的一列是指定线程是工作线程还是主线程的类别。是否有可能获得这些信息?

或者这样:获取作为入口点的函数的名称(主线程?)然后迭代当前进程中的所有线程怎么样。我怎样才能获得这些信息?

谢谢。

【问题讨论】:

“这个程序集引发了另一个线程,它想在控制台应用程序的主线程上等待(加入)。它将如何做到这一点?” - 通常,主线程将加入另一个线程,而不是相反。我从来没有看到需要你所说的。 这是主题名称,不是类别 关于入口点的程序集反射怎么样。有人可以弄清楚如何找到入口点方法吗? 【参考方案1】:

实际上没有线程是主线程。在产生更多线程之后,哪个是主线程就不再重要了。找出首先创建哪个线程的唯一方法是将对其的引用保存在某个全局静态字段中。

【讨论】:

那么 UI 线程是什么?当然 UI 线程 就是“主线程”的意思。我不同意你的看法。 @Aliostad:UI 线程是当前调用Application.Run 的线程。从技术上讲,它们与其他线程没有什么不同。 @SLaks 是的,但他们所做的却非常不同。处理 WIN32 消息循环发生在它们身上,因此需要区别对待。 好吧,这个问题的重点是:如果您无法访问主线程该怎么办,例如当您的代码位于由其他可执行文件加载的 DLL 中时。 @Aliostad @Vertilka 每个线程理论上都可以处理消息循环。它们无法区分。【参考方案2】:

您可以在创建另一个线程时存储对Thread.CurrentThread(这将是主线程)的引用。

【讨论】:

查看评论以了解 Andray 的回复

以上是关于引用 C# 中的主线程的主要内容,如果未能解决你的问题,请参考以下文章

Java 中的主线程与 UI 线程

如何从 Swift 中的主线程中关闭

android中的主线程

多线程二:jvm中的主线程&垃圾回收线程

C#中的多线程

Java中的主线程与UI线程