Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 29278|Atbildi: 2

[Avots] .net/c# pavediena pavediens Apturēt un atsākt novecojušos risinājumus

[Kopēt saiti]
Publicēts 17.05.2018 09:36:10 | | | |
Thread.Suspend ir novecojis.  Lūdzu, izmantojiet citas System.Threading klases, piemēram, Monitor, Mutex, Event un Semaphore, lai sinhronizētu pavedienus vai aizsargātu resursus.  Hipersaites pieteikšanās ir redzama.
Thread.Resume ir novecojis.  Lūdzu, izmantojiet citas System.Threading klases, piemēram, Monitor, Mutex, Event un Semaphore, lai sinhronizētu pavedienus vai aizsargātu resursus.  Hipersaites pieteikšanās ir redzama.
Ja pavediens vēlas pauzēt vai turpināt, es iepriekš esmu izmantojis divas apturēšanas un atsākšanas metodes un izmantoju šīs divas metodes, lai darbinātu pavedienu, kas patiesībā ir problemātisks, un man tas tolaik nerūpēja, tāpēc izņemsim to un izpētīsim šodien!

Kāda ir problēma ar iepriekš minēto divu metožu izmantošanu, lai apturētu un turpinātu pavedienus?

Piemēram, ja mēs izsaucam apturēšanas metodi, lai apturētu pavedienu, un pēc tam nekavējoties izsaucam metodi Resume, lai turpinātu apturēto pavedienu, tad var rasties problēma.

Tā kā pēc tam, kad esat izsaucis apturēšanas metodi, lai apturētu pavedienu, pavedienu var neapturēt nekavējoties, šeit tas aizņem apstrādes laiku, šobrīd jūs nekavējoties izsaucat metodi Resume, lai turpinātu apturēto pavedienu, un programma nekavējoties pakārtos!

Microsoft skaidrojums ir šāds:


Neizmantojiet metodes Apturēt un Atsākt, lai sinhronizētu pavediena darbību. Vai ir veids, kā uzzināt, kāds kods ir, kad pārtraucat pavediena izpildi. Ja drošības privilēģiju novērtēšanas laikā turat bloķēšanu, citi pavedieni jūsu apturētajā pavedienā AppDomain var tikt bloķēti. Ja, izpildot klases konstruktoru, apturat citus pavedienus AppDomain, mēģinājumi izmantot klasi tiek bloķēti. Strupceļi var viegli rasties.

//
        Kopsavilkuma:
        Turpiniet apturēto pavedienu.
        //
        Anomālija:
        T:System.Threading.ThreadStateException:
        Pavediens nav sākts, miris vai nav gaidīšanas stāvoklī.
        //
        T:System.Security.SecurityException:
        Zvanītājam nav atbilstošas System.Security.Permissions.SecurityPermission.
        [Novecojis("Thread.Resume ir novecojis.  Lūdzu, izmantojiet citas System.Threading klases, piemēram, Monitor, Mutex, Event un Semaphore, lai sinhronizētu pavedienus vai aizsargātu resursus.  Hipersaites pieteikšanās ir redzama.", nepatiess)]
        [DrošībaDrošsKritisks]
        publiski spēkā neesošs CV ();

Kā atrisināt šo problēmu?



ManualResetEvent klase

Paziņot vienam vai vairākiem gaidošajiem pavedieniem, ka ir noticis notikums. Šādus veidus nevar mantot.


Testa kods ir šāds:








Iepriekšējo:C# sūta īsziņas uz mobilajiem tālruņiem
Nākamo:SQL noņem atstarpes no datiem
 Saimnieks| Publicēts 17.05.2018 21:14:51 |
_event. Komplekts(); ir turpināt pavedienu
_event. Atiestatīt (); ir apturēt pavedienu
 Saimnieks| Publicēts 29.05.2018 14:58:49 |
Ja saņemat pašreizējā pavediena ID, izmantojiet :

Thread.CurrentThread.ManagedThreadId.ToString() (ieteicams)
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com