Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 29278|Risposta: 2

[Fonte] Thread .net/c# Sospendi e Riprendi soluzioni obsolete

[Copiato link]
Pubblicato su 17/05/2018 09:36:10 | | | |
Thread.Suspend è stato deprecato.  Si prega di utilizzare altre classi in System.Threading, come Monitor, Mutex, Event e Semaphore, per sincronizzare i Thread o proteggere le risorse.  Il login del link ipertestuale è visibile.
Thread.Resume è stato deprecato.  Si prega di utilizzare altre classi in System.Threading, come Monitor, Mutex, Event e Semaphore, per sincronizzare i Thread o proteggere le risorse.  Il login del link ipertestuale è visibile.
Se il thread vuole mettere in pausa o continuare, ho già usato i due metodi di Sospensione e Riprendi, e ho usato questi due metodi per gestire il thread, il che in realtà è problematico, e all'epoca non mi importava, quindi togliamola e studiamola oggi!

Qual è il problema nell'usare i due metodi sopra sopra per sospendere e continuare i thread?

Ad esempio, se chiamiamo il metodo Suspend per sospendere il thread, e poi chiamiamo immediatamente il metodo Resume per continuare il thread sospeso, allora potrebbe esserci un problema.

Perché, dopo aver chiamato il metodo Suspend per sospendere il thread, il thread potrebbe non essere sospeso immediatamente, qui ci vuole tempo di elaborazione, a questo punto chiami immediatamente il metodo Resume per continuare il thread sospeso, e il programma si bloccherà immediatamente!

La spiegazione di Microsoft è:


Non utilizzare i metodi Suspend e Resume per sincronizzare l'attività dei thread. C'è un modo per sapere cos'è il codice quando metti in pausa l'esecuzione del thread? Se si tiene un blocco durante la valutazione dei privilegi di sicurezza, altri thread nel thread sospeso in AppDomain potrebbero essere bloccati. Se sospendi altri thread nell'AppDomain durante l'esecuzione del costruttore di classe, i tentativi di utilizzo della classe vengono bloccati. Gli stalli possono verificarsi facilmente.

//
        Sommario:
        Continua con il filo sospeso.
        //
        Anomalia:
        T:System.Threading.ThreadStateException:
        Il thread non è stato avviato, morto o non è in stato di attesa.
        //
        T:System.Security.SecurityException:
        Il chiamante non possiede il corretto. Permessi.Sicurezza.Permessi.Sicurezza.
        [Obsoleto("Thread.Resume è stato deprecato.  Si prega di utilizzare altre classi in System.Threading, come Monitor, Mutex, Event e Semaphore, per sincronizzare i Thread o proteggere le risorse.  Il login del link ipertestuale è visibile.", falso)]
        [SicurezzaCriticaSicurezzaCritica]
        Curriculum di vuoto pubblico ();

Come risolvere questo problema?



Classe ManualResetEvent

Notifica uno o più thread in attesa che si è verificato un evento. Tali tipi non possono essere ereditati.


Il codice di prova è il seguente:








Precedente:C# invia messaggi di testo ai telefoni cellulari
Prossimo:SQL rimuove spazi dai dati
 Padrone di casa| Pubblicato su 17/05/2018 21:14:51 |
_event. Set(); è continuare il thread
_event. Reset(); è sospendere il filo
 Padrone di casa| Pubblicato su 29/05/2018 14:58:49 |
Se ottieni l'ID del thread corrente, usa:

Thread.CurrentThread.ManagedThreadId.ToString() (consigliato)
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com