Sdílet prostřednictvím


Použití vláken a dělení na vlákna

Pomocí .NET můžete psát aplikace, které provádějí více operací najednou. Operace s potenciálem přidržení jiných operací se můžou spouštět na samostatných vláknech, proces označovaný jako vícevláknové nebo volné vlákno.

Aplikace, které používají vícevláknové zpracování, reagují na uživatelský vstup, protože uživatelské rozhraní zůstává aktivní jako úlohy náročné na procesor spouštěné na samostatných vláknech. Multithreading je také užitečný při vytváření škálovatelných aplikací, protože při nárůstu úloh můžete přidávat vlákna.

Poznámka:

Pokud potřebujete větší kontrolu nad chováním vláken aplikace, můžete je spravovat sami. Vícevláknové programování je však značně zjednodušené pomocí System.Threading.Tasks.Parallel a tříd, Parallel LINQ (PLINQ), souběžných tříd kolekcí v System.Collections.Concurrent oboru názvů a programovacího modelu založeného na konceptu úloh, nikoli System.Threading.Tasks.Task na vláknech. Další informace naleznete v tématu Paralelní programování a paralelní knihovna úkolů (TPL).

Postupy: Vytvoření a spuštění nového vlákna

Vytvoříte nové vlákno vytvořením nové instance System.Threading.Thread třídy. Do konstruktoru zadáte název metody, kterou chcete spustit v novém vlákně. Chcete-li spustit vytvořené vlákno, zavolejte metodu Thread.Start . Další informace a příklady najdete v článku Vytváření vláken a předávání dat v čase spuštění a referenční informace k Thread rozhraní API.

Postupy: Zastavení vlákna

Chcete-li ukončit provádění vlákna, použijte System.Threading.CancellationToken. Poskytuje jednotný způsob, jak zastavit vlákna kooperativně. Další informace najdete v tématu Zrušení ve spravovaných vláknech.

Někdy není možné zastavit vlákno kooperativně, protože spouští kód třetí strany, který není navržený pro kooperativní zrušení. V takovém případě můžete chtít jeho spuštění ukončit vynuceně. Chcete-li ukončit provádění vlákna vynuceně, v rozhraní .NET Framework můžete použít metodu Thread.Abort . Tato metoda vyvolá ThreadAbortException vlákno, na kterém je vyvoláno. Další informace naleznete v tématu Zničení vláken. Metoda Thread.Abort není v .NET Core podporovaná. Pokud potřebujete ukončit provádění kódu třetí strany vynuceně v .NET Core, spusťte ho v samostatném procesu a použijte metodu Process.Kill .

Není System.Threading.CancellationToken k dispozici před rozhraním .NET Framework 4. Pokud chcete zastavit vlákno ve starších verzích rozhraní .NET Framework, použijte techniky synchronizace vláken k ruční implementaci kooperativního zrušení. Můžete například vytvořit volatilní logické pole shouldStop a použít ho k vyžádání kódu spuštěného vláknem k zastavení. Další informace najdete v referenčních informacích jazyka C# aSystem.Threading.Volatile.

Použijte metodu Thread.Join k tomu, aby volající vlákno čekalo na ukončení vlákna, které je zastaveno.

Postupy: Pozastavení nebo přerušení vlákna

Tuto metodu Thread.Sleep použijete k pozastavení aktuálního vlákna po zadanou dobu. Blokované vlákno můžete přerušit voláním Thread.Interrupt metody. Další informace najdete v tématu Pozastavení a přerušení vláken.

Vlastnosti vlákna

V následující tabulce jsou uvedeny některé vlastnosti Thread :

Vlastnost Popis
IsAlive Vrátí true , pokud bylo vlákno spuštěno a ještě nebylo ukončeno normálně nebo přerušeno.
IsBackground Získá nebo nastaví logickou hodnotu, která označuje, zda vlákno je vlákno na pozadí. Vlákna na pozadí jsou jako vlákna popředí. Vlákno na pozadí ale nezabrání zastavení procesu. Jakmile se zastaví všechna vlákna popředí, která patří do procesu, common language runtime ukončí proces voláním Abort metody na vlákna na pozadí, která jsou stále aktivní. Další informace naleznete v tématu Popředí a Vlákna na pozadí.
Name Získá nebo nastaví název vlákna. Nejčastěji se používá ke zjišťování jednotlivých vláken při ladění.
Priority Získá nebo nastaví ThreadPriority hodnotu, kterou operační systém používá k určení priority plánování vláken. Další informace naleznete v tématu Plánování vláken a referenční informace ThreadPriority .
ThreadState ThreadState Získá hodnotu obsahující aktuální stavy vlákna.

Viz také