你可以使用不当SuspendThread或Wow64SuspendThread找出它是否被禁赛,然后用ResumeThread挽回局面。
SuspendThread return:“如果函数成功,则返回值是线程先前的暂停计数;”
声明:
[Flags] public enum ThreadAccess : int {
TERMINATE = (0x0001),
SUSPEND_RESUME = (0x0002),
GET_CONTEXT = (0x0008),
SET_CONTEXT = (0x0010),
SET_INFORMATION = (0x0020),
QUERY_INFORMATION = (0x0040),
SET_THREAD_TOKEN = (0x0080),
IMPERSONATE = (0x0100),
DIRECT_IMPERSONATION = (0x0200)}
[DllImport("kernel32.dll")]
static extern IntPtr OpenThread(
ThreadAccess dwDesiredAccess,
bool bInheritHandle,
uint dwThreadId);
[DllImport("kernel32.dll")]
static extern uint SuspendThread(IntPtr hThread);
[DllImport("kernel32.dll")]
static extern int ResumeThread(IntPtr hThread);
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool CloseHandle(IntPtr handle);
(Wow64SuspendThread链接隐藏,因为我需要10的声誉投入超过2个链接= ht.tps://msdn.microsoft.com/it-it/library/windows/desktop/ ms687400(v = vs.85).aspx)
System.Threading的一个很好,当然?你想做什么?在MSDN的诊断中,它说:“线程状态枚举只在少数调试场景中有用,你的代码不应该使用线程状态来同步线程的活动。”一般情况下,诊断不是你应该用于实际处理线程的东西 – Mattsjo
操作系统线程与.Net线程不同。 'Process.Threads'返回操作系统线程,每个线程可能对应或不对应一个.Net线程。您可以查看['ProcessThread.WaitReason'](http://msdn.microsoft.com/zh-cn/library/system.diagnostics.processthread.waitreason.aspx),但它不对应于.Net等待状态。 –
@Matthew沃森如果你会写这个答案我会批准它。 –