A Thread.Suspend leépült. Kérjük, használjon más osztályokat a System.Threadingben, mint például Monitor, Mutex, Event és Semaphore, hogy szinkronizálják a szálakat vagy védjék az erőforrásokat. A hiperlink bejelentkezés látható. A Thread.Resume lejáratott. Kérjük, használjon más osztályokat a System.Threadingben, mint például Monitor, Mutex, Event és Semaphore, hogy szinkronizálják a szálakat vagy védjék az erőforrásokat. A hiperlink bejelentkezés látható. Ha a téma szünetet akar tartani vagy folytatni, én már használtam a két módszert, a Felfüggesztést és az Resume-t, és ezeket a módszereket használom a thread működtetéséhez, ami valójában problémás, és akkor nem érdekelt, szóval vegyük ki ma, és tanulmányozzuk!
Mi a probléma azzal, ha a fenti két módszert használjuk a szálak felfüggesztésére és folytatására?
Például, ha a szál felfüggesztésére hívjuk a Felfüggesztés metódust, majd azonnal a Folytatás metódut, hogy folytassa a felfüggesztett szálat, akkor probléma adódhat.
Mert miután a Felfüggesztés metódut hívod a szál felfüggesztésére, a szál nem feltétlenül szüntethető meg azonnal, itt feldolgozási időbe telik, ekkor azonnal behívod az Resume metódudot, hogy folytassa a felfüggesztett szálat, és a program azonnal lefagy!
A Microsoft magyarázata:
Ne használd a Suspend és Resume metódusokat a szál aktivitásának szinkronizálására. Van mód arra, hogy megtudd, mi a kód, amikor megállítod a szál végrehajtását? Ha biztonsági jogosultság-értékelés közben zárol, az AppDomainben felfüggesztett szál más szálai is blokkolhatók. Ha az osztálykonstruktor végrehajtása közben felfüggeszted az AppDomain többi szálát, az osztály használatára tett kísérletek blokkolódnak. A patthelyzet könnyen előfordulhat.
// Összefoglalás: Folytasd a felfüggesztett szálat. // Anomália: T:System.Threading.ThreadStateException: A szál nincs elindítva, halott, vagy nincs függőben lévő állapotban. // T:System.Security.SecurityException: A hívónak nincs megfelelő System.Security.Permissions.SecurityPermission fájlja. [Elavult ("Thread.Resume elavult. Kérjük, használjon más osztályokat a System.Threadingben, mint például Monitor, Mutex, Event és Semaphore, hogy szinkronizálják a szálakat vagy védjék az erőforrásokat. A hiperlink bejelentkezés látható.", hamis)] [SecuritySafeKritikus] public void Resume(); Hogyan lehet megoldani ezt a problémát?
ManualResetEvent osztály
Értesíts egy vagy több várakozó szálat egy eseményről. Az ilyen típusok nem öröklődhetnek.
A tesztkód a következő:
|