我正在使用此代码创建新的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
}
有什么主意我可以通过初始化的名称获取线程吗?
答案 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
集合中的线程名称检查线程的状态。