Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 29278|Svar: 2

[Kilde] .net/c# Trådtråd Suspend og genoptag forældede løsninger

[Kopier link]
Opslået på 17/05/2018 09.36.10 | | | |
Thread.Suspend er blevet afskaffet.  Brug venligst andre klasser i System.Threading, såsom Monitor, Mutex, Event og Semaphore, for at synkronisere tråde eller beskytte ressourcer.  Hyperlink-login er synlig.
Tråd.CV er blevet forældet.  Brug venligst andre klasser i System.Threading, såsom Monitor, Mutex, Event og Semaphore, for at synkronisere tråde eller beskytte ressourcer.  Hyperlink-login er synlig.
Hvis tråden vil pause eller fortsætte, har jeg brugt de to metoder Suspend og Genoptag før, og bruger disse to metoder til at styre tråden, hvilket faktisk er problematisk, og jeg var ligeglad med det dengang, så lad os tage det frem og studere det i dag!

Hvad er problemet med at bruge de to ovenstående metoder til at suspendere og fortsætte tråde?

For eksempel, hvis vi kalder Suspend-metoden for at suspendere tråden, og derefter straks kalder Resume-metoden for at fortsætte den suspenderede tråd, kan der opstå et problem.

For efter du kalder Suspend-metoden for at suspendere tråden, kan tråden ikke blive suspenderet med det samme, her tager det behandlingstid, på dette tidspunkt kalder du straks Resume-metoden for at fortsætte den suspenderede tråd, og programmet vil straks hænge!

Microsofts forklaring er:


Brug ikke metoderne Suspend og Genoptag til at synkronisere trådaktivitet. Er der en måde at vide, hvilken kode der er, når du sætter eksekveringen af tråden på pause? Hvis du holder en lås under evaluering af sikkerhedsprivilegier, kan andre tråde i din suspenderede tråd i AppDomain blive blokeret. Hvis du suspenderer andre tråde i AppDomain under udførelsen af klassekonstruktøren, blokeres forsøg på at bruge klassen. Dødvande kan nemt opstå.

//
        Resumé:
        Fortsæt den suspenderede tråd.
        //
        Anomali:
        T:System.Threading.ThreadStateException:
        Tråden er ikke startet, død eller i en ventende tilstand.
        //
        T:System.Security.SecurityException:
        Kalderen har ikke de korrekte System.Security.Permissions.SecurityPermissions.
        [Forældet("Tråd.CV er blevet udfaset.  Brug venligst andre klasser i System.Threading, såsom Monitor, Mutex, Event og Semaphore, for at synkronisere tråde eller beskytte ressourcer.  Hyperlink-login er synlig.", falsk)]
        [SecuritySafeCritical]
        offentlig tomrum CV();

Hvordan løser man dette problem?



ManualResetEvent-klassen

Underret en eller flere ventende tråde om, at en hændelse er indtruffet. Sådanne typer kan ikke arves.


Testkoden er som følger:








Tidligere:C# sender sms'er til mobiltelefoner
Næste:SQL fjerner mellemrum fra dataene
 Udlejer| Opslået på 17/05/2018 21.14.51 |
_event. Set(); er at fortsætte tråden
_event. Reset(); er at suspendere tråden
 Udlejer| Opslået på 29/05/2018 14.58.49 |
Hvis du får ID'et på den aktuelle tråd, brug :

Thread.CurrentThread.ManagedThreadId.ToString() (anbefalet)
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com