Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 29278|Resposta: 2

[Fonte] Thread .net/c# Suspender e Retomar soluções obsoletas

[Copiar link]
Publicado em 17/05/2018 09:36:10 | | | |
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:








Anterior:C# envia mensagens de texto para celulares
Próximo:SQL remove espaços dos dados
 Senhorio| Publicado em 17/05/2018 21:14:51 |
_event. Set(); é continuar o tópico
_event. Reset(); é suspender a fiação
 Senhorio| Publicado em 29/05/2018 14:58:49 |
Se você conseguir o ID do tópico atual, use:

Thread.CurrentThread.ManagedThreadId.ToString() (recomendado)
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com