按名称查找C#线程

时间:2019-02-27 22:15:03

标签: c# .net multithreading

我正在使用此代码创建新的Thread

Thread thread = new Thread(delegate()
{
    Thread.Sleep(TimeSpan.FromSeconds(delay));
    method();
});

thread.Name = identifier;
thread.Start();

我正在尝试遍历线程并按其名称查找线程,但是我只能从ProcessThread获取ID:

ProcessThreadCollection currentThreads = Process.GetCurrentProcess().Threads;

foreach (ProcessThread thread in currentThreads)    
{
   // Do whatever you need
} 

有什么主意我可以通过初始化的名称获取线程吗?

1 个答案:

答案 0 :(得分:1)

在您的foreach中,您将线程数组强制转换为System.Diagnostics.ProcessThread而不是System.Threading.Thread,因此丢失了某些属性,例如线程名。假设您的线程存储在List<Thread>();中,则可以使用以下LINQ来获取具有匹配标识符名称的线程:

var threads = new List<Thread>();
var thread = threads.FirstOrDefault(x => x.Name == identifier);

或者如果您需要遍历列表,可以执行以下操作:

foreach (var thread in currentThreads)    
{
   // Do whatever you need
} 

var将被推断为System.Threading.Thread

编辑:

您无法执行的操作。您将放弃对线程的引用,并丢失名称和Name属性。 .NET受管线程对象与操作系统ProcessThread对象不同。

您应该考虑使用线程ID作为标识符,或者在创建新线程时将其存储在列表中,并使用System.Threading.Thread集合中的线程名称检查线程的状态。