我想获取当前进程的所有线程,并查看某一指定线程的状态或运行时间
Process current = Process.GetCurrentProcess();
ProcessThreadCollection allThreads = current.Threads;
现在我能获得所有线程的线程ID,但是无法识别某一线程是否是我的目标线程。因为在线程启动时可以指定线程名称,这样就可以通过指定名称来判断某一线程的状态。所以我想通过线程ID来获取线程名称,这样就可以识别我的目标线程了。
但是如何通过线程ID来获取线程名称呢?

解决方案 »

  1.   

    直接把线程加到List<Thread>里吧            Thread tempThread = threadList.Where(x => x.Name == "测试线程名称").FirstOrDefault();            if (tempThread != null)
                {
                    Console.WriteLine(tempThread.ThreadState);
                }
      

  2.   

    你确定你给每个线程都赋予名称了吗,线程默认名称可能是空的。如果你要靠为线程赋予名称来定位线程,那和把线程ID存入List<int>,不是一样的效果?
      

  3.   

    定义一个全局的map,其中以线程i的为key,线程名称为value,每次新线程启动就保存进去,线程结束就删除,这样就可以根据名称确认是不是你的目标线程了。
      

  4.   

    真不知道你说的怎么就复杂了,你新建一个线程添加一下就麻烦了?而且ProcessThreadCollection里面得到的是ProcessThreadSystem.Diagnostics.ProcessThread

    System.Threading.Thread
    两个完全不是一个类型,没有任何什么联系System.Diagnostics.ProcessThread表示当前非托管线程
    System.Threading.Thread 是托管线程ProcessThread也根本没有什么名称这个属性
      

  5.   

    其实这个问题很好解决,也不用取得线程名称,在你设线程名的时候,把线程名称设成和线程ID一样就可以了!这样直接ID就可以当成名称用了