Thread.Resume Устаревший или устаревший: как возобновить приостановленный поток без использования System.Threading.Thread.Resume?

Вот как я возобновляю приостановленную беседу.

  if SerialThread.ThreadState = ThreadState.Suspended then
    SerialThread.Resume;

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

TSerialIndicator.pas (77,18): предупреждение PW3: Obsolete: «System.Threading.Thread.Resume устарел. Используйте другие классы в System.Threading, такие как Monitor, Mutex, Event и Semaphore, для синхронизации потоков или защитить ресурсы.

Итак, как правильно в .NET возобновить приостановленный поток?


person ThN    schedule 08.02.2013    source источник
comment
Thread.Suspend() также устарел.   -  person SLaks    schedule 08.02.2013
comment
@SLaks, да ты прав. Означает ли это, что их не следует использовать, поскольку они могут вызвать проблемы в вашей программе? За исключением предупреждения, программа вроде как с этим справляется. Однако у меня возникают проблемы.   -  person ThN    schedule 08.02.2013
comment
Приостановка и возобновление потоков по своей сути являются опасными и небезопасными операциями. Тебе тоже не стоит этого делать.   -  person SLaks    schedule 08.02.2013
comment
@Slaks, ладно ... Так что ты посоветуешь? Спасибо.   -  person ThN    schedule 08.02.2013
comment
Что я предлагаю для чего?   -  person SLaks    schedule 08.02.2013
comment
@Slaks, я думал, у тебя есть предложения, как мне это делать. Если они небезопасны, как это сделать, не используя их.   -  person ThN    schedule 08.02.2013
comment
@digitalanalog публикует новый вопрос, описывающий чего вы пытаетесь достичь, приостанавливая / возобновляя потоки. Вы, вероятно, получите несколько хороших советов по альтернативам.   -  person Anton Kovalenko    schedule 08.02.2013
comment
@AntonKovalenko, я думал вопрос ясен. Я прошу альтернативу, если компилятор предупреждает, что методы Suspend и Resume устарели или устарели.   -  person ThN    schedule 08.02.2013
comment
@digitalanalog вещь, которую вы пытаетесь сделать, устарела, а не только методы. Вы можете пойти дальше и игнорировать предупреждения или можете решить вашу настоящую проблему (... если бы мы только знали об этом) каким-либо другим способом.   -  person Anton Kovalenko    schedule 08.02.2013
comment
@digitalanalog, возможно, это поможет stackoverflow.com/questions/382173/   -  person Zaki    schedule 08.02.2013
comment
@digitalanalog: Вся концепция приостановки и возобновления потока по своей сути опасна. Вам нужно сделать что-то совершенно другое. Какую проблему ты пытаешься решить?   -  person SLaks    schedule 08.02.2013


Ответы (1)


AutoResetEvent отлично подходит для «приостановки» потока, код вашего потока просто вызывает событие. Подождите, пока он не сделает что-нибудь, когда вызывающий вызовет event.Set (), который прерывает ожидание.

person Carlo Kok    schedule 08.02.2013