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
| Name | Hodnota | Description |
|---|---|---|
| Running | 0 | Vlákno bylo spuštěno a ještě nebylo zastaveno. |
| StopRequested | 1 | Vlákno je požadováno k zastavení. Toto je pouze pro interní použití. |
| SuspendRequested | 2 | Vlákno je požadováno k pozastavení. |
| 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. |
| Unstarted | 8 | Metoda Start() nebyla vyvolána ve vlákně. |
| Stopped | 16 | Vlákno se zastavilo. |
| WaitSleepJoin | 32 | Vlákno je blokováno. Může se jednat o 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áken, například ManualResetEvent. |
| Suspended | 64 | Vlákno bylo pozastaveno. |
| AbortRequested | 128 | Metoda Abort(Object) byla vyvolána ve vlákně, ale vlákno dosud nepřijalo čekající, ThreadAbortException které se pokusí ukončit. |
| Aborted | 256 | Stav vlákna obsahuje AbortRequested a vlákno je nyní mrtvé, ale jeho stav se ještě nezměnil na Stopped. |
Poznámky
Výčet ThreadState definuje sadu všechmožnýchch Je to 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.
Po vytvoření vlákna 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 v důsledku 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 další volání vlákna Thread.Abort v blokované vlákno, blokované vlákno bude ve stejnou dobu jak ve stavu, tak WaitSleepJoinAbortRequested ve stejnou dobu. V tomto případě, jakmile vlákno vrátí z volání Monitor.Wait nebo 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 stavechAborted.Unstarted
Vlákno 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.
| Action | ThreadState |
|---|---|
| Vlákno se vytvoří v modulu CLR (Common Language Runtime). | Unstarted |
| Další vlákno volá metodu Thread.Start v novém vlákně a volání vrátí. Metoda Start se nevrátí, dokud se nové vlákno nespustilo. Neexistuje způsob, jak zjistit, v jakém okamžiku bude nové vlákno spuštěno 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 odpoví na Suspend požadavek. | Suspended |
| Další volání vlákna Resume | Running |
| Další volání vlákna Abort | AbortRequested |
| Vlákno odpoví 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 části Vlákna popředí a pozadí.
Thread.ThreadState Vlastnost vlákna poskytuje aktuální stav vlákna. Aplikace musí použít bitovou masku k určení, zda je vlákno spuštěno. Vzhledem k tomu, že je hodnota nula Running (0), otestujte, jestli je vlákno spuštěné následujícím kódem:
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0