Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 29278|Vastaus: 2

[Lähde] .net/c# Ketjuketju Keskeytä ja jatka vanhentuneita ratkaisuja

[Kopioi linkki]
Julkaistu 17.5.2018 9.36.10 | | | |
Thread.Suspend on poistettu käytöstä.  Käytä muita luokkia System.Threadingissä, kuten Monitor, Mutex, Event ja Semaphore, synkronoidaksesi säikeitä tai suojataksesi resursseja.  Hyperlinkin kirjautuminen on näkyvissä.
Thread.Resume on vanhentunut.  Käytä muita luokkia System.Threadingissä, kuten Monitor, Mutex, Event ja Semaphore, synkronoidaksesi säikeitä tai suojataksesi resursseja.  Hyperlinkin kirjautuminen on näkyvissä.
Jos ketju haluaa pysäyttää tai jatkaa, olen käyttänyt kahta menetelmää, Suspend ja Resume, ja käytän näitä kahta menetelmää ketjun pyörittämiseen, mikä on itse asiassa ongelmallista, enkä välittänyt siitä silloin, joten otetaan se esiin ja opiskellaan sitä tänään!

Mikä on ongelma yllä mainittujen kahden menetelmän käytössä säikeiden keskeyttämiseen ja jatkamiseen?

Esimerkiksi, jos kutsumme Suspend -metodia säikeen keskeyttämiseksi ja sitten heti Resume-metodin jatkaaksemme keskeytettyä säikettä, voi olla ongelma.

Koska kun kutsut Suspend -metodin säikeen keskeyttämiseen, säie ei välttämättä keskeytetä heti, tässä prosessi vie käsittelyaikaa, jolloin kutsut välittömästi Resume-metodin jatkaaksesi keskeytettyä säikettä, ja ohjelma jumittuu välittömästi!

Microsoftin selitys on:


Älä käytä Suspend ja Resume -metodeja säikeiden toiminnan synkronointiin. Onko olemassa keinoa tietää, mitä koodia on, kun säikeen suoritus keskeytetään? Jos pidät lukkoa turvallisuusoikeuksien arvioinnin aikana, muut säikeet keskeytetyssä säikeessäsi AppDomainissa saatetaan estää. Jos keskeytät muita säikeitä AppDomainissa suorittaessasi luokkarakentajaa, yritykset käyttää luokkaa estyvät. Pattitilanteet voivat syntyä helposti.

//
        Yhteenveto:
        Jatka keskeytettyä lankaa.
        //
        Poikkeama:
        T:System.Threading.ThreadStateException:
        Säie ei ole käynnistetty, kuollut tai ei ole odotustilassa.
        //
        T:System.Security.SecurityException:
        Soittajalla ei ole asianmukaista System.Security.Permissions.SecurityPermission-tiedostoa.
        [Vanhentunut ("Thread.Resume on poistettu käytöstä.  Käytä muita luokkia System.Threadingissä, kuten Monitor, Mutex, Event ja Semaphore, synkronoidaksesi säikeitä tai suojataksesi resursseja.  Hyperlinkin kirjautuminen on näkyvissä.", väärin)]
        [SecuritySafeCritical]
        julkinen mitätöity Ansioluettelo();

Miten ratkaista tämä ongelma?



ManualResetEvent-luokka

Ilmoita yhdelle tai useammalle odottavalle säikeelle, että tapahtuma on tapahtunut. Tällaisia tyyppejä ei voi periä.


Testikoodi on seuraava:








Edellinen:C# lähettää tekstiviestejä matkapuhelimiin
Seuraava:SQL poistaa tilat datasta
 Vuokraisäntä| Julkaistu 17.5.2018 21.14.51 |
_event. Set(); on jatkaa lankaa
_event. Reset(); on säikeen keskeyttäminen
 Vuokraisäntä| Julkaistu 29.5.2018 14.58.49 |
Jos saat nykyisen ketjun ID:n, käytä :

Thread.CurrentThread.ManagedThreadId.ToString() (suositeltava)
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com