Petteri
Petteri

Reputation: 251

How to enumerate threads in .NET using the Name property?

Suppose I start two threads like this:

// 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();

Is there any way I can enumerate the threads by using their Name property?

I want to be ablie to check if a thread with a specific name is still running.

Each thread I create works with a named set of data, the name of the data set is used as the name for the thread working with the data. Before starting a worker thread I want to see if any previous thread for the same set of data is already running.

The threads I get when using System.Diagnostics.GetCurrentProcess().Threads are of type ProcessThread, not Thread!

Upvotes: 14

Views: 7673

Answers (4)

Kent Boogaart
Kent Boogaart

Reputation: 178650

Note also that thread names are not required to be unique. Seems like using the thread ID might be a better option...

Upvotes: 0

Michael Prewecki
Michael Prewecki

Reputation: 2102

I think you want the following

System.Diagnostics.Process.GetCurrentProcess().Threads

Upvotes: -2

Oliver Friedrich
Oliver Friedrich

Reputation: 9240

So, after my mistake with the process threads, here a way how to hold your Threads. Nothing spectacular, but I think coding examples are very handy anytime.

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

Upvotes: -1

Marc Gravell
Marc Gravell

Reputation: 1062705

I suspect you might have to put the threads into a Dictionary<string,Thread> for that to work - but why do you want it anyway? There are usually other ways of communicating between threads (any of the lock / wait objects).

To work at the process level (i.e. not thinking of the Thread object), see here - you could limit it to the current process, but you won't be able to interact with the thread.

Upvotes: 4

Related Questions