Как перечислять потоки в .NET с использованием свойства Name?
Предположим, что я запускаю два потока следующим образом:
// 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?
Я хочу быть ablie, чтобы проверить, работает ли поток с определенным именем.
Каждый поток, который я создаю, работает с именованным набором данных, имя набора данных используется как имя потока, работающего с данными. Перед тем, как начать рабочий поток, я хочу посмотреть, запущен ли какой-либо предыдущий поток для одного и того же набора данных.
Потоки, которые я получаю при использовании System.Diagnostics.GetCurrentProcess().Threads
, имеют тип ProcessThread
, а не Thread
!
Ответы
Ответ 1
Я подозреваю, что вам, возможно, придется поместить потоки в Dictionary<string,Thread>
, чтобы это сработало, но почему вы все равно хотите? Обычно существуют другие способы связи между потоками (любой из объектов блокировки/ожидания).
Чтобы работать на уровне процесса (т.е. не думая о объекте Thread
), см. здесь - вы можете ограничить его текущий процесс, но вы не сможете взаимодействовать с потоком.
Ответ 2
Обратите внимание, что имена потоков не обязательно должны быть уникальными. Кажется, что использование идентификатора потока может быть лучшим вариантом...
Ответ 3
Итак, после моей ошибки с потоками процесса, вот способ хранения ваших потоков. Ничего впечатляющего, но я думаю, что примеры кодирования очень удобны в любое время.
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);
}
Ответ 4
Я думаю, вам нужно следующее
System.Diagnostics.Process.GetCurrentProcess(). Тем