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

时间:2009-01-21 20:20:02

标签: c# multithreading

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

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

这听起来像是“How to enumerate threads in .NET using the Name property?”的副本 - 如果是这样,简短的回答是“自己跟踪自己的主题” - 即List<Thread>或类似内容。

答案 2 :(得分:2)

看看Managed Stack Explorer

  

MSE通过快速附加到a来工作   堆栈跟踪时的进程   请求和分离第二个   已检索到堆栈跟踪。   这样干扰了   这个过程的正常运作是   最小化。

不幸的是,这意味着已经由外部流程完成。

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

答案 3 :(得分:0)

您可以通过向 ProcInsp 发出 HTTP GET 请求来枚举线程。 ProcInsp 允许您使用 CLR 进程的堆栈跟踪(在其 UI 中或作为 JSON 消息)获取线程。 Web API 可在 /Process/%PID%/Threads 获得。

免责声明:我是此工具的开发者。它已获得 MIT 许可,可免费使用。