Thread.Suspend foi descontinuado. Por favor, use outras classes no System.Threading, como Monitor, Mutex, Event e Semaphore, para sincronizar Threads ou proteger recursos. O login do hiperlink está visível. Thread.Resume foi descontinuado. Por favor, use outras classes no System.Threading, como Monitor, Mutex, Event e Semaphore, para sincronizar Threads ou proteger recursos. O login do hiperlink está visível. Se o tópico quiser pausar ou continuar, já usei os dois métodos de Suspender e Retomar antes, e uso esses dois métodos para operar o tópico, o que na verdade é problemático, e na época eu não me importava, então vamos lá estudar hoje!
Qual é o problema de usar os dois métodos acima para suspender e continuar threads?
Por exemplo, se chamarmos o método Suspend para suspender a thread, e então imediatamente chamarmos o método Resume para continuar a thread suspensa, pode haver um problema.
Porque, depois que você chama o método Suspend para suspender a thread, a thread pode não ser suspensa imediatamente, aqui leva tempo de processamento, nesse momento, você chama imediatamente o método Resume para continuar a thread suspensa, e o programa trava imediatamente!
A explicação da Microsoft é:
Não use os métodos Suspender e Retomar para sincronizar a atividade da thread. Existe alguma forma de saber o que é código quando você pausa a execução da thread? Se você mantiver um bloqueio durante a avaliação de privilégios de segurança, outras threads na sua thread suspensa no AppDomain podem ser bloqueadas. Se você suspender outras threads no AppDomain ao executar o construtor de classe, as tentativas de usar a classe são bloqueadas. Impasses podem ocorrer facilmente.
// Resumo: Continue com a linha suspensa. // Anomalia: T:System.Threading.ThreadStateException: A thread não foi iniciada, não está morta ou não está em estado de espera (pending status). // T:System.Security.SecurityException: O chamador não possui a permissão de Sistema.Segurança.Permissões.SegurançaPermissão adequada. [Obsoleto("Thread.Resume foi descontinuado. Por favor, use outras classes no System.Threading, como Monitor, Mutex, Event e Semaphore, para sincronizar Threads ou proteger recursos. O login do hiperlink está visível.", falso)] [SegurançaSeguraCrítica] Currículo de anulação pública (); Como resolver esse problema?
Classe ManualResetEvent
Notifique um ou mais threads em espera que um evento ocorreu. Tais tipos não podem ser herdados.
O código do teste é o seguinte:
|