Sdílet prostřednictvím


ThreadState Výčet

Definice

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
ThreadState
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

Platí pro

Viz také