Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 29278|Svar: 2

[Källa] .net/c# Trådtråd Suspend och Resume föråldrade lösningar

[Kopiera länk]
Publicerad på 2018-05-17 09:36:10 | | | |
Thread.Suspend har avskaffats.  Använd andra klasser i System.Threading, såsom Monitor, Mutex, Event och Semaphore, för att synkronisera trådar eller skydda resurser.  Inloggningen med hyperlänken är synlig.
Tråd. CV har föråldrats.  Använd andra klasser i System.Threading, såsom Monitor, Mutex, Event och Semaphore, för att synkronisera trådar eller skydda resurser.  Inloggningen med hyperlänken är synlig.
Om tråden vill pausa eller fortsätta har jag använt de två metoderna Suspend och Resume tidigare, och använder dessa två metoder för att köra tråden, vilket faktiskt är problematiskt, och jag brydde mig inte om det då, så låt oss ta fram det och studera det idag!

Vad är problemet med att använda ovanstående två metoder för att suspendera och fortsätta trådar?

Till exempel, om vi anropar Suspend-metoden för att suspenda tråden, och sedan omedelbart anropar Resume-metoden för att fortsätta den suspenderade tråden, kan det uppstå ett problem.

För efter att du anropat Suspend-metoden för att suspendera tråden kanske tråden inte stängs omedelbart, här tar det bearbetningstid, vid denna tidpunkt anropar du omedelbart Resume-metoden för att fortsätta den avstängda tråden, och programmet hänger direkt!

Microsofts förklaring är:


Använd inte metoderna Suspend och Resume för att synkronisera trådaktivitet. Finns det något sätt att veta vilken kod som är när du pausar trådens körning? Om du håller ett lås under utvärdering av säkerhetsprivilegier kan andra trådar i din avstängda tråd i AppDomain blockeras. Om du pausar andra trådar i AppDomain när du kör klasskonstruktören blockeras försök att använda klassen. Dödlägen kan lätt uppstå.

//
        Sammanfattning:
        Fortsätt med den avstängda tråden.
        //
        Anomali:
        T:System.Threading.ThreadStateException:
        Tråden är inte påbörjad, död eller i väntande tillstånd.
        //
        T:System.Security.SecurityException:
        Anroparen har inte rätt System.Security.Permissions.SecurityPermission.
        [Föråldrad("Tråd.CV har avskaffats.  Använd andra klasser i System.Threading, såsom Monitor, Mutex, Event och Semaphore, för att synkronisera trådar eller skydda resurser.  Inloggningen med hyperlänken är synlig.", falsk)]
        [SecuritySafeCritical]
        offentlig tomma CV();

Hur löser man detta problem?



ManualResetEvent-klassen

Meddela en eller flera väntande trådar om att en händelse har inträffat. Sådana typer kan inte ärvas.


Testkoden är följande:








Föregående:C# skickar textmeddelanden till mobiltelefoner
Nästa:SQL tar bort mellanrum från datan
 Hyresvärd| Publicerad på 2018-05-17 21:14:51 |
_event. Set(); är att fortsätta tråden
_event. Reset(); är att suspendera tråden
 Hyresvärd| Publicerad på 2018-05-29 14:58:49 |
Om du får ID:t för den aktuella tråden, använd :

Thread.CurrentThread.ManagedThreadId.ToString() (rekommenderas)
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com