ThreadState Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje stavy provádění .Thread
Tento výčet podporuje bitové kombinace hodnot jeho členů.
public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState =
[<System.Flags>]
[<System.Serializable>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState =
Public Enum ThreadState
- Dědičnost
- Atributy
Pole
Aborted | 256 | Stav vlákna zahrnuje AbortRequested a vlákno je nyní mrtvé, ale jeho stav se ještě nezměnil na Stopped. |
AbortRequested | 128 | Metoda Abort(Object) byla vyvolána ve vlákně, ale vlákno ještě nepřijalo čekající ThreadAbortException , které se pokusí ukončit. |
Background | 4 | Vlákno se spouští jako vlákno na pozadí, na rozdíl od vlákna popředí. Tento stav je řízen nastavením IsBackground vlastnosti. |
Running | 0 | Vlákno bylo spuštěno a ještě nebylo zastaveno. |
Stopped | 16 | Vlákno se zastavilo. |
StopRequested | 1 | Vlákno se požaduje, aby se zastavilo. Toto je pouze pro interní použití. |
Suspended | 64 | Vlákno bylo pozastaveno. |
SuspendRequested | 2 | Vlákno je požadováno k pozastavení. |
Unstarted | 8 | Metoda Start() nebyla vyvolána ve vlákně. |
WaitSleepJoin | 32 | Vlákno je blokováno. Může to být výsledek volání Sleep(Int32) nebo Join()žádosti o zámek , například voláním Enter(Object) nebo Wait(Object, Int32, Boolean) čekáním na objekt synchronizace vlákna, jako ManualResetEventje . |
Poznámky
Výčet ThreadState
definuje sadu všech možných stavů spuštění pro vlákna. Je zajímavé jenom v několika scénářích ladění. Kód by nikdy neměl používat stav vlákna k synchronizaci aktivit vláken.
Jakmile se vlákno vytvoří, je alespoň v jednom ze stavů, dokud se neukončí. Vlákna vytvořená v modulu CLR (Common Language Runtime) jsou zpočátku ve Unstarted stavu, zatímco externí nebo nespravovaná vlákna, která přicházejí do modulu runtime, jsou již ve Running stavu. Vlákno je převedeno ze Unstarted stavu do Running stavu voláním Thread.Start. Jakmile vlákno opustí Unstarted stav jako výsledek volání Start, nemůže se nikdy vrátit do Unstarted stavu.
Vlákno může být v daném okamžiku ve více než jednom stavu. Pokud je například vlákno blokováno voláním Monitor.Waita jiné vlákno volá Thread.Abort blokované vlákno, blokované vlákno bude ve stejnou dobu jak ve stavu, tak ve AbortRequested WaitSleepJoin stejnou dobu. V takovém případě, jakmile se vlákno vrátí z volání nebo Monitor.Wait je přerušeno, obdrží ThreadAbortException zahájení přerušení. Ne všechny kombinace ThreadState
hodnot jsou platné. Například vlákno nemůže být v obou Aborted stavech.Unstarted
Vlákno nikdy nemůže opustit Stopped stav.
Důležité
Existují dva výčty stavu vlákna: System.Threading.ThreadState a System.Diagnostics.ThreadState.
Následující tabulka ukazuje akce, které způsobují změnu stavu.
Akce | ThreadState |
---|---|
Vlákno se vytvoří v modulu CLR (Common Language Runtime). | Unstarted |
Další vlákno volá metodu Thread.Start na novém vlákně a volání vrátí. Metoda Start se nevrací, dokud se nové vlákno nespustilo. Neexistuje způsob, jak zjistit, v jakém okamžiku se nové vlákno spustí během volání Start. |
Running |
Volání vlákna Sleep | WaitSleepJoin |
Vlákno volá Monitor.Wait jiný objekt. | WaitSleepJoin |
Vlákno volá Join jiné vlákno. | WaitSleepJoin |
Další volání vlákna Interrupt | Running |
Další volání vlákna Suspend | SuspendRequested |
Vlákno reaguje na Suspend žádost. | Suspended |
Další volání vlákna Resume | Running |
Další volání vlákna Abort | AbortRequested |
Vlákno reaguje na Abort požadavek. | Stopped |
Vlákno je ukončeno. | Stopped |
Kromě výše uvedených stavů existuje také Background stav, který označuje, zda vlákno běží na pozadí nebo na popředí. Další informace naleznete v tématu Popředí a Vlákna na pozadí.
Vlastnost Thread.ThreadState vlákna poskytuje aktuální stav vlákna. Aplikace musí použít bitovou masku k určení, jestli je vlákno spuštěné. Vzhledem k tomu, že je hodnota nula Running (0), otestujte, jestli je vlákno spuštěné pomocí následujícího kódu:
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0