有谁知道是否可以检测在托管环境中何时创建新线程?
我想要一个应用程序中所有线程的列表(每个线程的 ID 和名称)。我在 Visual Studio 中使用并发可视化工具,它仅显示线程 ID(而不是线程名称)。如果您有 20 多个没有名称的线程,则很难可视化程序流程。
编辑:
使用Process.GetCurrentProcess()
。线程不行,因为 CLR 不保证托管线程和非托管线程之间的一对一映射。
一种解决方案是创建某种线程管理器,所有线程创建都必须通过它来完成。它还将管理所有当前活动线程的列表。
答案是否定的,你不能 - 你甚至无法枚举所有当前的“托管”线程,更不用说在创建/销毁线程时收到通知了。
See 如何枚举 C# 中的所有托管线程? https://stackoverflow.com/questions/466799/how-can-i-enumerate-all-managed-threads-in-c
Note:您可以使用以下命令枚举进程中的所有线程Process
class:
Process.GetCurrentProcess().Threads
然而,这并没有告诉您其中哪一个是“托管的”,并且在创建或销毁线程时也不会通知您。
您可能可以尝试通过查看托管线程的堆栈跟踪来找出其中哪些线程是“托管”的,但老实说,我不知道这是否真的适用于非托管线程,而这一切都开始看起来非常危险!
new StackTrace().GetFrame(someThread)
只是为了澄清 - 你几乎肯定不应该做任何这些,这只是一些背景。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)