Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 29278|Antwort: 2

[Quelle] .net/c# Thread-Thread Suspend and Resume macht veraltete Lösungen

[Link kopieren]
Veröffentlicht am 17.05.2018 09:36:10 | | | |
Thread.Suspend wurde eingestellt.  Bitte verwenden Sie andere Klassen in System.Threading, wie Monitor, Mutex, Event und Semaphore, um Threads zu synchronisieren oder Ressourcen zu schützen.  Der Hyperlink-Login ist sichtbar.
Thread.Resume wurde veraltet.  Bitte verwenden Sie andere Klassen in System.Threading, wie Monitor, Mutex, Event und Semaphore, um Threads zu synchronisieren oder Ressourcen zu schützen.  Der Hyperlink-Login ist sichtbar.
Wenn der Thread pausieren oder fortsetzen möchte, habe ich schon die beiden Methoden Suspendieren und Resume verwendet und diese beiden Methoden genutzt, um den Thread zu bedienen, was tatsächlich problematisch ist, und das war mir damals egal, also lass uns heute herausnehmen und ihn studieren!

Was ist das Problem mit den oben genannten beiden Methoden, um Threads zu suspendieren und fortzusetzen?

Wenn wir zum Beispiel die Suspend-Methode aufrufen, um den Thread zu suspendieren, und dann sofort die Resume-Methode aufrufen, um den suspendierten Thread fortzusetzen, kann es ein Problem geben.

Denn nachdem du die Suspend-Methode aufgerufen hast, um den Thread zu suspendieren, wird der Thread möglicherweise nicht sofort suspendiert, hier dauert es eine Verarbeitungszeit, zu diesem Zeitpunkt rufst du sofort die Resume-Methode auf, um den suspendierten Thread fortzusetzen, und das Programm hängt sofort!

Microsofts Erklärung lautet:


Verwenden Sie nicht die Methoden Suspend und Resume, um Thread-Aktivitäten zu synchronisieren. Gibt es eine Möglichkeit herauszufinden, welcher Code ist, wenn man die Ausführung des Threads pausiert? Wenn Sie während der Überprüfung der Sicherheitsprivilegien eine Sperre halten, können andere Threads in Ihrem suspendierten Thread in AppDomain blockiert werden. Wenn du andere Threads im AppDomain suspendierst, während du den Klassenkonstruktor ausführst, werden Versuche, die Klasse zu verwenden, blockiert. Deadlocks können leicht auftreten.

//
        Zusammenfassung:
        Führe den ausgesetzten Thread fort.
        //
        Anomalie:
        T:System.Threading.ThreadStateException:
        Der Thread ist weder gestartet, tot noch in einem ausstehenden Zustand.
        //
        T:System.Security.SecurityException:
        Der Anrufer verfügt nicht über die entsprechenden System.Security.Permissions.SecurityPermissions.
        [Veraltet("Faden.Lebenslauf wurde veraltet.  Bitte verwenden Sie andere Klassen in System.Threading, wie Monitor, Mutex, Event und Semaphore, um Threads zu synchronisieren oder Ressourcen zu schützen.  Der Hyperlink-Login ist sichtbar.", falsch)]
        [SecuritySafeCritical]
        öffentlicher Leerlauf Lebenslauf();

Wie kann man dieses Problem lösen?



ManualResetEvent-Klasse

Benachrichtige einen oder mehrere wartende Threads, dass ein Ereignis aufgetreten ist. Solche Typen können nicht vererbt werden.


Der Testcode ist wie folgt:








Vorhergehend:C# sendet Textnachrichten an Mobiltelefone
Nächster:SQL entfernt Speicherplätze aus den Daten
 Vermieter| Veröffentlicht am 17.05.2018 21:14:51 |
_event. Set(); ist, den Thread fortzusetzen
_event. Reset(); ist, den Faden zu suspendieren
 Vermieter| Veröffentlicht am 29.05.2018 14:58:49 |
Wenn du die ID des aktuellen Threads bekommst, verwende:

Thread.CurrentThread.ManagedThreadId.ToString() (empfohlen)
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com