有谁知道是否可以检测托管环境中何时创建了新线程?
我想要一个应用程序中所有线程的列表(每个线程的 ID 和名称)。我在 Visual Studio 中使用并发可视化工具,它仅显示线程 ID(而不是线程名称)。如果您有 20 多个没有名称的线程,则很难可视化程序流程。
编辑: 使用 Process.GetCurrentProcess()。线程不行,因为 CLR 不保证托管线程和非托管线程之间的一对一映射。
一种解决方案是创建某种线程管理器,所有线程创建都必须通过它来完成。它还将管理所有当前事件线程的列表。
最佳答案
答案是否定的,您不能 - 您甚至无法枚举所有当前的“托管”线程,更不用说在创建/销毁线程时收到通知了。
参见How can I enumerate all managed threads in C#?
注意:您可以使用 Process
类枚举进程中的所有线程:
Process.GetCurrentProcess().Threads
但是,这不会告诉您其中哪一个是“托管”的,并且不会在创建或销毁线程时通知您。
您可能可以尝试通过查看托管线程的堆栈跟踪来找出其中哪些线程是“托管”的,但老实说,我不知道这是否真的适用于非托管线程,而且这一切都开始看起来很真实躲闪!
new StackTrace().GetFrame(someThread)
只是为了澄清 - 你几乎肯定不应该做任何这些,这只是一些背景。
关于c# - 检测何时创建新的托管线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761696/