如何枚举C#中的所有托管线程?

是否可以枚举C#中的所有托管线程? 当您在调试时遇到断点时,Visual Studio似乎能够执行此操作。 在“线程”窗口中,它显示所有正在运行的线程的列表,包括托管名称。 有谁知道这是怎么回事?

调试器往往能够做“正常”代码不能做的事情。 如果使用分析/调试API,您可能会发现可以执行此操作,但我不相信您可以从“普通”.NET代码中执行此操作。

这听起来像是“ 如何使用Name属性在.NET中枚举线程? ” – 如果是这样,简短的回答是“自己跟踪自己的线程” – 即在List或类似的情况下。

看一下Managed Stack Explorer :

MSE通过在请求堆栈跟踪时快速附加到进程并且在第二个分离堆栈跟踪已被检索的情况下工作。 这样,最小化了过程正常操作中的干扰。

不幸的是,这意味着必须通过外部流程完成。

类似的工具是StackDump ,它使用MDbg生成转储。