Остановка только одного потока
У меня есть много потоков в моем приложении, как мне остановить только один поток из них? Если я использую 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
}