C#访问主线程实例而不持有引用
C# access main thread instance without holding a reference
是否可以在不持有应用程序启动时设置的引用的情况下获取主线程的实例?在我看来,在初始化模块时传递主线程实例并不是一个很好的解决方案。
谢谢大家!
为了获得参考,需要将其保存在某处。您可以决定将它放在哪里。
Passing main thread instances around when initializing modules is not a very good solution in my point of view.
在初始化时传递主线程实例并不是您唯一可用的选项。您还有其他几种选择:
- 在知名模块中引用
static
- 这是最简单的选项,影响非常有限,因为主线程永远不会改变。
- 创建线程注册表,指明哪个线程 ID 是主线程 - 此选项可让您维护线程层次结构
- 使用逆控制容器,让它为你设置引用 - 这是一个高级选项,可能适用于 IOC 环境。它允许您将访问主线程的模块与项目的主模块分离。
I need access to the IsAlive
property
您可以创建一个带有 static
对主线程的引用的单个模块,并给它 IsMainThreadAlive
属性。您可以通过静态提供一个通知订阅者主线程已退出的事件来进一步封装对 IsAlive
的检查。对于需要知道主线程何时退出的模块,这将作为一个很好的解耦选项。
是否可以在不持有应用程序启动时设置的引用的情况下获取主线程的实例?在我看来,在初始化模块时传递主线程实例并不是一个很好的解决方案。
谢谢大家!
为了获得参考,需要将其保存在某处。您可以决定将它放在哪里。
Passing main thread instances around when initializing modules is not a very good solution in my point of view.
在初始化时传递主线程实例并不是您唯一可用的选项。您还有其他几种选择:
- 在知名模块中引用
static
- 这是最简单的选项,影响非常有限,因为主线程永远不会改变。 - 创建线程注册表,指明哪个线程 ID 是主线程 - 此选项可让您维护线程层次结构
- 使用逆控制容器,让它为你设置引用 - 这是一个高级选项,可能适用于 IOC 环境。它允许您将访问主线程的模块与项目的主模块分离。
I need access to the
IsAlive
property
您可以创建一个带有 static
对主线程的引用的单个模块,并给它 IsMainThreadAlive
属性。您可以通过静态提供一个通知订阅者主线程已退出的事件来进一步封装对 IsAlive
的检查。对于需要知道主线程何时退出的模块,这将作为一个很好的解耦选项。