Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 29278|Atsakyti: 2

[Šaltinis] .net/c# Siūlų gija Sustabdyti ir atnaujinti pasenusius sprendimus

[Kopijuoti nuorodą]
Paskelbta 2018-05-17 09:36:10 | | | |
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:








Ankstesnis:C# siunčia tekstinius pranešimus į mobiliuosius telefonus
Kitą:SQL pašalina tarpus iš duomenų
 Savininkas| Paskelbta 2018-05-17 21:14:51 |
_event. Rinkinys(); yra tęsti temą
_event. Atstatyti(); yra sustabdyti siūlą
 Savininkas| Paskelbta 2018-05-29 14:58:49 |
Jei gaunate dabartinės gijos ID, naudokite :

Thread.CurrentThread.ManagedThreadId.ToString() (rekomenduojama)
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com