问题描述
在:1.已经能够获取到该进程的ID2.已经能够获取到该进程的指定线程的ID和句柄的条件下,怎么获取该线程的状态。状态就是System.Threading.ThreadState中的那10种中的任意一种,我想把它打印到一个listbox里。查了很多都是获取“当前”线程的状态,而不是“指定”线程的状态。
解决方案
解决方案二:
Process[]arr=Process.GetProcessesByName("QQ");if(null!=arr){Processpro=arr[0];foreach(ProcessThreadthreadinpro.Threads){Console.WriteLine(String.Format("ID:{0}StartTime:{1}ThreadState{2}",thread.Id,thread.StartTime,thread.ThreadState));}}
解决方案三:
if(null!=arr)改成if(null!=arr&&arr.Length>0)
解决方案四:
引用1楼songbing774933的回复:
Process[]arr=Process.GetProcessesByName("QQ");if(null!=arr){Processpro=arr[0];foreach(ProcessThreadthreadinpro.Threads){Console.WriteLine(String.Format("ID:{0}StartTime:{1}ThreadState{2}",thread.Id,thread.StartTime,thread.ThreadState));}}
谢谢你,但ProcessThread里的ThreadState只有8种状态,分别是://此状态指示线程已初始化但尚未启动。Initialized=0,//此状态指示线程因无可用的处理器而等待使用处理器。线程准备在下一个可用的处理器上运行。Ready=1,//此状态指示线程当前正在使用处理器。Running=2,//此状态指示线程将要使用处理器。一次只能有一个线程处于此状态。Standby=3,//此状态指示线程已完成执行并已退出。Terminated=4,//此状态指示线程尚未准备好使用处理器,因为它正在等待外围操作完成或等待资源释放。当线程就绪后,将对其进行重排Wait=5,//此状态指示线程在可以执行前等待处理器之外的资源。例如,它可能正在等待其执行堆栈从磁盘中分页。Transition=6,//线程的状态未知。Unknown=7而我想要的是System.Threading里的ThreadState那十种状态中的一种:
解决方案五:
在1#的基础上,用ThreadState再结合thread.WaitReason就可以了,而且更细致
解决方案六:
.net中的线程被称之为托管线程,不等于Windows中线程。