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

时间:2009-01-09 09:20:13

标签: c# multithreading

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

// 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时获得的主题是ProcessThread类型,而不是Thread

4 个答案:

答案 0 :(得分:4)

我怀疑你可能必须将线程放到Dictionary<string,Thread>才能使用 - 但是你为什么还要这样做呢?线程之间通常有其他通信方式(任何锁定/等待对象)。

要在流程级别工作(即不考虑Thread对象),请参阅here - 您可以将其限制为当前流程,但您将无法与线程。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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

List<Thread> threads = new List<Thread>();

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);
}

答案 3 :(得分:-2)

我想你想要以下

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