Reputation: 251
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
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
Reputation: 2102
I think you want the following
System.Diagnostics.Process.GetCurrentProcess().Threads
Upvotes: -2
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
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