全部
我正在编写一个小代码,用于在计算机进程中按线程 id 搜索线程。
我所有的代码如下所示,请帮忙查看。:)
using System.Diagnostics;
public class NKDiagnostics
{
private Process[] m_arrSysProcesses;
private void Init()
{
m_arrSysProcesses = Process.GetProcesses(".");
}
public static ProcessThread[] GetProcessThreads(int nProcID)
{
try
{
Process proc = Process.GetProcessById(nProcID);
ProcessThread[] threads = new ProcessThread[proc.Threads.Count];
proc.Threads.CopyTo(threads, 0);
return threads;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
}
在另一个类中,我分配了一个线程来执行我的名为DoNothing
ThreadPool.QueueUserWorkItem((t) => Utility.DoNothing((TimeSpan)t),
TimeSpan.FromMinutes(1));
功能DoNothing
代码是
public class Utility
{
public static void DoNothing(TimeSpan timeout, TextBox txtThreadId)
{
TimeoutHelper helper = new TimeoutHelper(timeout);
while (true)
{
Thread.Sleep(1000 * 5);
if (helper.RemainingTime() <= TimeSpan.Zero)
{
MessageBox.Show("This thread's work is finished.");
break;
}
else
{
if (Thread.CurrentThread.IsThreadPoolThread)
{
MessageBox.show( Thread.CurrentThread.ManagedThreadId.ToString());
}
}
}
}
}
我的问题是Thread.CurrentThread.ManagedThreadId
节目10,我在所有过程中都搜索了它。但是没找到。
ProcessThread[] m_Threads = NKDiagnostics.GetProcessThreads(processId);
for (int i = 0; i < m_Threads.Length; i++)
{
if (m_Threads[i].Id.Equals(10))
{
MessageBox.Show("Found it.");
}
}
我错过了什么吗?为什么我找不到这个线程?请帮助我。谢谢。
更新
我对这段代码做一些实验的最初想法是试图找到一种方法来获取托管线程的状态。显然,我在这里发布的方式并没有成功。所以我的问题是如何知道具有指定线程 ID 的托管线程的状态?谢谢。