Подтвердить что ты не робот

Как перечислять потоки в .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!

4b9b3361

Ответ 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(). Тем