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

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

Platí pro

Viz také