【发布时间】:2013-08-16 07:40:25
【问题描述】:
我想检查进程的线程(整个进程)是否被挂起。 我通过这段代码获取每个进程线程:
var threads = Proc.Threads;
for (int x = 0; x < threads.Count; x++) {
var thread = threads[x];
但是System.Diagnostics.ThreadState 不包含Suspended,但System.Threading.ThreadState 包含。如何将System.Diagnostics.ThreadState 转换为System.Threading.ThreadState,或者是否有其他方法可以检查它?我不是想暂停/恢复它们,只是想知道 Process hacker/Process explorer 是如何做到的。
【问题讨论】:
-
System.Threading 的一个就足够了,确定吗?你想做什么?在 MSDN 的诊断中,它说“线程状态枚举仅对少数调试场景感兴趣。您的代码永远不应使用线程状态来同步线程的活动。”一般来说,诊断不是您应该用于实际处理线程的工具
-
操作系统线程与 .Net 线程不同。
Process.Threads返回操作系统线程,每个线程可能对应也可能不对应 .Net 线程。你可以看看ProcessThread.WaitReason,但它不对应.Net等待状态。 -
@Matthew Watson 如果你愿意写这个作为答案,我会批准的。
标签: c# multithreading process