在正在运行的.Net应用程序中查看,暂停和终止线程

时间:2008-09-19 14:46:47

标签: .net multithreading

我正在开发一个具有多个线程的.Net应用程序,可以执行各种操作。 当生产中出现问题时,我希望能够看到哪些线程正在运行(通过其托管名称),并且还能够暂停/终止它们。

无论如何要实现这个目标?

VS并不总是可用(虽然这是一个很好的选择),而WinDbg UI并不适合精灵。

我考虑过程序中的线程窗口,就像VS在调试时一样,但找不到编程方式来执行此操作。 Process.GetThreads返回的可用数据非常少。

5 个答案:

答案 0 :(得分:3)

寻找线程:

using System.Diagnostics;

ProcessThreadCollection threads = Process.GetCurrentProcess().Threads;

您通常可以使用Thread.Abort()终止托管线程。如果他们在睡眠,等待或加入你甚至可以逃脱(不那么讨厌)Thread.Interrupt()。

答案 1 :(得分:2)

.net中没有内置任何内容可以做到这一点。如果要以编程方式迭代活动线程,则必须在启动时在某处注册它们,并在完成时取消注册它们或在对其执行操作之前对其进行过滤。我们做了一个版本,它需要一些非常重要的工作。

答案 2 :(得分:0)

如果你想要更轻的重量,你可以附加一个托管调试器来查看/冻结线程,或者使用带有SOS扩展的WinDbg。

答案 3 :(得分:0)

您可以使用ProcessExplorer按ID和状态查看进程中正在运行的线程。

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

使用“属性”窗口的“线程”选项卡。

您还可以杀死线程并查看线程堆栈

答案 4 :(得分:0)

远程调试怎么样?由于安全性并确保您拥有正确的调试符号,因此设置可能有点挑剔。

Remote Debugging Setup