Thread.Suspend je bil ukinjen. Prosimo, uporabite druge razrede v System.Threading, kot so Monitor, Mutex, Event in Semaphore, za sinhronizacijo niti ali zaščito virov. Prijava do hiperpovezave je vidna. Tema.Življenjepis je bil zastarel. Prosimo, uporabite druge razrede v System.Threading, kot so Monitor, Mutex, Event in Semaphore, za sinhronizacijo niti ali zaščito virov. Prijava do hiperpovezave je vidna. Če se nit želi ustaviti ali nadaljevati, sem že uporabljal obe metodi, Suspend in Resume, in uporabljam ti dve metodi za upravljanje niti, kar je dejansko problematično, in takrat me to ni zanimalo, zato jo danes vzemimo ven in preučimo!
Kakšen je problem z uporabo zgoraj omenjenih dveh metod za začasno prekinitev in nadaljevanje tem?
Na primer, če pokličemo metodo Suspend za začasno prekinitev niti, nato pa takoj pokličemo metodo Resume za nadaljevanje suspendirane niti, se lahko pojavi težava.
Ker po tem, ko pokličete metodo Suspend za začasno prekinitev niti, nit morda ne bo takoj suspendirana, tukaj traja obdelava; takrat takoj pokličete metodo Resume za nadaljevanje suspendirane niti, program pa se takoj zatakne!
Microsoftova razlaga je:
Ne uporabljajte metod Suspend in Resume za sinhronizacijo aktivnosti niti. Ali obstaja način, da veš, kaj je koda, ko ustaviš izvajanje niti? Če med ocenjevanjem varnostnih privilegijev držite zaklep, so lahko blokirane druge niti v vaši suspendirani niti v AppDomain. Če med izvajanjem konstruktorja razreda začasno suspendirate druge niti v AppDomain, so poskusi uporabe razreda blokirani. Zastoji se lahko zlahka zgodijo.
// Povzetek: Nadaljujte z začasno prekinjeno temo. // Anomalija: T:System.Threading.ThreadStateException: Nit ni začeta, mrtva ali ni v čakajočem stanju. // T:System.Security.SecurityException: Klicatelj nima ustreznega System.Security.Permissions.SecurityPermission. [Zastarelo("Nit. Življenjepis je zastarel. Prosimo, uporabite druge razrede v System.Threading, kot so Monitor, Mutex, Event in Semaphore, za sinhronizacijo niti ali zaščito virov. Prijava do hiperpovezave je vidna.", napačno)] [VarnostVarnoKritično] javna praznina Življenjepis(); Kako rešiti ta problem?
Razred ManualResetEvent
Obvestite eno ali več čakalnih niti, da se je zgodil dogodek. Takšnih vrst ni mogoče dedovati.
Testna koda je naslednja:
|