Thread.Suspend nebenaudojamas. Naudokite kitas System.Threading klases, pvz., Monitor, Mutex, Event ir Semaphore, norėdami sinchronizuoti gijas arba apsaugoti išteklius. Hipersaito prisijungimas matomas. Thread.Resume nebenaudojamas. Naudokite kitas System.Threading klases, pvz., Monitor, Mutex, Event ir Semaphore, norėdami sinchronizuoti gijas arba apsaugoti išteklius. Hipersaito prisijungimas matomas. Jei gija nori pristabdyti arba tęsti, aš naudojau du metodus sustabdyti ir atnaujinti anksčiau, ir naudoti šiuos du metodus valdyti giją, kuri iš tikrųjų yra problematiška, ir man nerūpėjo apie tai tuo metu, todėl išimkime jį ir studijuoti jį šiandien!
Kokia problema naudojant pirmiau minėtus du metodus sustabdyti ir tęsti temas?
Pavyzdžiui, jei iškviečiame sustabdymo metodą, kad sustabdytume giją, o tada nedelsdami iškviestume metodą Atnaujinti, kad tęstume sustabdytą giją, gali kilti problemų.
Nes paskambinus sustabdymo metodui, kad sustabdytumėte siūlą, siūlas gali būti nedelsiant sustabdytas, čia reikia apdorojimo laiko, šiuo metu jūs nedelsdami paskambinate į atnaujinimo metodą, kad tęstumėte sustabdytą siūlą, ir programa iškart pakibs!
"Microsoft" paaiškinimas yra toks:
Nenaudokite sustabdymo ir tęsimo metodų gijų veiklai sinchronizuoti. Ar yra būdas sužinoti, kas yra kodas, kai pristabdote gijos vykdymą. Jei saugos privilegijų vertinimo metu laikysite užraktą, kitos "AppDomain" sustabdytos gijos gijos gali būti užblokuotos. Jei vykdydami klasės konstruktorių sustabdysite kitas "AppDomain" gijas, bandymai naudoti klasę bus užblokuoti. Aklavietės gali lengvai atsirasti.
// Suvestinė: Tęskite pakabinamą siūlą. // Anomalija: T:System.Threading.ThreadStateException: Gija nepradėta, negyva arba nėra laukiamos būsenos. // T:System.Security.SecurityException: Skambinantysis neturi tinkamo System.Security.Permissions.SecurityPermission. [Obsolete("Thread.Resume buvo pasenęs. Naudokite kitas System.Threading klases, pvz., Monitor, Mutex, Event ir Semaphore, norėdami sinchronizuoti gijas arba apsaugoti išteklius. Hipersaito prisijungimas matomas.", false)] [SaugumasSaugusKritinis] viešas negaliojantis Resume(); Kaip išspręsti šią problemą?
ManualResetEvent klasė
Pranešti vienai ar kelioms laukiančioms gijoms, kad įvyko įvykis. Tokių tipų negalima paveldėti.
Bandymo kodas yra toks:
|