如何使用Name属性枚举.NET中的线程?

假设我启动两个这样的线程:

// Start first thread Thread loaderThread1 = new Thread(loader.Load); loaderThread1.Name = "Rope"; loaderThread1.Start(); // Start second thread Thread loaderThread2 = new Thread(loader.Load); loaderThread2.Name = "String"; loaderThread2.Start(); 

有什么办法可以通过使用Name属性来枚举线程吗?

我希望能够检查具有特定名称的线程是否仍在运行。

我创建的每个线程都使用一组命名数据,数据集的名称用作处理数据的线程的名称。 在启动工作线程之前,我想查看同一组数据的任何先前线程是否已在运行。

我在使用System.Diagnostics.GetCurrentProcess().Threads时得到的线程System.Diagnostics.GetCurrentProcess().ThreadsProcessThread类型,而不是Thread

我怀疑你可能不得不把线程放入一个Dictionary来实现它 – 但是你为什么还要这样呢? 线程之间通常有其他通信方式(任何锁定/等待对象)。

要在进程级别工作(即不考虑Thread对象),请参阅此处 – 您可以将其限制为当前进程,但您将无法与该线程进行交互。

另请注意,线程名称不必是唯一的。 似乎使用线程ID可能是更好的选择……

所以,在我对进程线程的错误之后,这里有一种方法来保存你的线程。 没什么了不起的,但我认为编码示例随时都非常方便。

 List threads = new List(); for (int i = 0; i < 10; i++) { Thread t = new Thread(delegate() { do { Thread.Sleep(50); } while (true); }); t.IsBackground = true; t.Name = i.ToString(); t.Start(); threads.Add(t); } foreach (Thread t in threads) { Console.WriteLine(t.Name); } 

我想你想要以下内容

System.Diagnostics.Process.GetCurrentProcess()。线程