Остановка только одного потока

У меня есть много потоков в моем приложении, как мне остановить только один поток из них? Если я использую Thread.Sleep() это останавливает все приложение, я просто хочу остановить один поток. Как я могу это сделать? Я использую C#.

1 ответ

Решение

Когда вы используете Thread.Sleep() Вы останавливаете только поток, который вызвал этот метод. Если ваш основной поток (т.е. поток пользовательского интерфейса) вызывает Thread.Sleep(), затем приложение зависает (фактически другие потоки продолжают работать, но пользовательский интерфейс не обновляется). Итак, если вы хотите остановить какой-то поток, то:

  • это не должно быть основной темой
  • просто позвони Thread.Sleep() в этой теме

Пример (предположим, что этот код выполняется в основном потоке):

ThreadPool.QueueUserWorkItem(DoSomething);
Thread.Sleep(1000); // this will freeze application

И это обратный вызов (который выполняется в фоновом потоке):

static void DoSomething(object state)
{
    Thread.Sleep(5000); // this will not freeze application
}
Другие вопросы по тегам