C#访问主线程实例而不持有引用

C#访问主线程实例而不持有引用,c#,multithreading,reference,instance,C#,Multithreading,Reference,Instance,是否可以在不保存应用程序启动时设置的引用的情况下获取主线程的实例?在我看来,在初始化模块时传递主线程实例不是一个很好的解决方案 谢谢大家! 为了获得参考,需要将其保存在某个地方。这取决于你决定你到底想把它放在哪里 在我看来,在初始化模块时传递主线程实例不是一个很好的解决方案 在初始化时传递主线程实例不是您唯一可用的选项。您还有其他几种选择: 在一个著名的模块中引用static——这是最简单的选项,影响非常有限,因为主线程从不更改 创建线程注册表,指示哪个线程ID是主线程-此选项允许您维护线程层

是否可以在不保存应用程序启动时设置的引用的情况下获取主线程的实例?在我看来,在初始化模块时传递主线程实例不是一个很好的解决方案


谢谢大家!

为了获得参考,需要将其保存在某个地方。这取决于你决定你到底想把它放在哪里

在我看来,在初始化模块时传递主线程实例不是一个很好的解决方案

在初始化时传递主线程实例不是您唯一可用的选项。您还有其他几种选择:

  • 在一个著名的模块中引用
    static
    ——这是最简单的选项,影响非常有限,因为主线程从不更改
  • 创建线程注册表,指示哪个线程ID是主线程-此选项允许您维护线程层次结构
  • 使用控制容器的反转,并让它为您设置参考-这是一个高级选项,可能适用于IOC环境。它允许您将访问主线程的模块与项目的主模块解耦

我需要访问
IsAlive
属性


您可以使用对主线程的
static
引用创建单个模块,并为其指定
IsMainThreadAlive
属性。您可以通过静态地提供一个事件来通知订阅者主线程已退出,从而进一步封装对
IsAlive
的检查。对于需要知道主线程何时退出的模块来说,这将是一个很好的去耦选项。

您所说的“主线程”是什么意思?如果您指的是运行
Main
的线程的
Thread
对象,我不确定您为什么需要它。没有多少有用的东西可以用它来做。请使用Invoke和Thread.CurrentThread。我需要访问
IsAlive
属性。当第三方物流没有选择时,就需要这样做。或者有更好的选择吗?您需要在主线程上检查
IsAlive
?为什么?TPL与这些有什么关系?您是否正在轮询主线程状态以了解何时退出子线程?您的第一个解决方案是我通常使用的,尽管有一些替代方案。非常感谢。