Как перечислить потоки в .NET, используя свойство Name? - PullRequest
14 голосов
/ 09 января 2009

Предположим, я запускаю две темы, подобные этой:

// 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 ]

4 голосов
/ 09 января 2009

Я подозреваю, что вам, возможно, придется поместить потоки в Dictionary<string,Thread>, чтобы это работало - но почему вы все равно хотите это? Обычно существуют другие способы связи между потоками (любой из объектов блокировки / ожидания).

Чтобы работать на уровне процесса (то есть не думать об объекте Thread), см. здесь - вы можете ограничить его текущим процессом, но вы не сможете взаимодействовать с нить.

0 голосов
/ 09 января 2009

Я думаю, вы хотите следующее

System.Diagnostics.Process.GetCurrentProcess (). Темы

0 голосов
/ 09 января 2009

Итак, после моей ошибки с потоками процесса, вот способ удержания ваших потоков. Ничего впечатляющего, но я думаю, что примеры кодирования очень удобны в любое время.

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);
}
0 голосов
/ 09 января 2009

Обратите внимание, что имена потоков не обязательно должны быть уникальными. Похоже, что лучше использовать идентификатор потока ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...