如何使用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().Threads
是ProcessThread
类型,而不是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()。线程