Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 29278|Odpověď: 2

[Zdroj] .net/c# Thread Suspend and Resume zastaralá řešení

[Kopírovat odkaz]
Zveřejněno 17.05.2018 9:36:10 | | | |
Vlákno. Suspend byl zrušen.  Použijte prosím jiné třídy v System.Threading, jako jsou Monitor, Mutex, Event a Semaphore, k synchronizaci vláken nebo ochraně zdrojů.  Přihlášení k hypertextovému odkazu je viditelné.
Vlákno. Životopis byl zrušen.  Použijte prosím jiné třídy v System.Threading, jako jsou Monitor, Mutex, Event a Semaphore, k synchronizaci vláken nebo ochraně zdrojů.  Přihlášení k hypertextovému odkazu je viditelné.
Pokud chce vlákno pozastavit nebo pokračovat, už jsem použil obě metody Suspend a Resume a tyto dvě metody používám k ovládání vlákna, což je vlastně problém, a tehdy mi to bylo jedno, takže to dnes vyndáme a prostudujeme!

Jaký je problém s použitím výše uvedených dvou metod pro pozastavení a pokračování v vláknech?

Například pokud zavoláme metodu Suspend pro pozastavení vlákna a pak ihned zavoláme metodu Resume pro pokračování pozastaveného vlákna, může nastat problém.

Protože po zavolání metody Suspend pro pozastavení vlákna nemusí být vlákno okamžitě pozastaveno, zde to trvá zpracovatelský čas, v tomto okamžiku ihned zavoláte metodu Resume pro pokračování pozastaveného vlákna a program se okamžitě zasekne!

Microsoft vysvětluje:


Nepoužívejte metody Suspend a Resume k synchronizaci aktivity vláken. Existuje způsob, jak zjistit, co je kód, když pozastavíte spuštění vlákna? Pokud držíte zámek během vyhodnocování bezpečnostních oprávnění, mohou být zablokována i další vlákna ve vašem pozastaveném vlákně v AppDomain. Pokud při spuštění konstruktoru třídy pozastavíte další vlákna v AppDomain, pokusy o použití třídy jsou zablokovány. Patové situace mohou snadno nastat.

//
        Shrnutí:
        Pokračujte v pozastaveném vlákně.
        //
        Anomálie:
        T:System.Threading.ThreadStateException:
        Vlákno není zahájeno, mrtvé ani není ve stavu čekající na vyřízení.
        //
        T:System.Security.SecurityException:
        Volající nemá správné System.Security.Permissions.SecurityPermission.
        [Zastaralé("Vlákno. Životopis byl zrušen.  Použijte prosím jiné třídy v System.Threading, jako jsou Monitor, Mutex, Event a Semaphore, k synchronizaci vláken nebo ochraně zdrojů.  Přihlášení k hypertextovému odkazu je viditelné.", nepravda)]
        [BezpečnostBezpečnéKritické]
        veřejná prázdnota Resume();

Jak tento problém vyřešit?



Třída ManualResetEvent

Upozorněte jedno nebo více čekajících vláken, že došlo k události. Takové typy nelze dědit.


Testovací kód je následující:








Předchozí:C# posílá textové zprávy na mobilní telefony
Další:SQL odebírá mezery z dat
 Pronajímatel| Zveřejněno 17.05.2018 21:14:51 |
_event. set(); je pokračovat v vlákně
_event. Reset(); je pozastavení vlákna
 Pronajímatel| Zveřejněno 29.05.2018 14:58:49 |
Pokud získáte ID aktuálního vlákna, použijte :

Thread.CurrentThread.ManagedThreadId.ToString() (doporučeno)
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com