ThreadState Wyliczenie

Definicja

Określa stany wykonywania elementu Thread.

To wyliczenie obsługuje bitową kombinację jego wartości składowych.

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

Pola

Aborted 256

Stan wątku obejmuje AbortRequested i wątek jest teraz martwy, ale jego stan nie został jeszcze zmieniony na Stopped.

AbortRequested 128

Metoda Abort(Object) została wywołana w wątku, ale wątek nie otrzymał jeszcze oczekującej ThreadAbortException metody, która podejmie próbę jej zakończenia.

Background 4

Wątek jest wykonywany jako wątek w tle, w przeciwieństwie do wątku pierwszego planu. Ten stan jest kontrolowany IsBackground przez ustawienie właściwości .

Running 0

Wątek został uruchomiony i nie został jeszcze zatrzymany.

Stopped 16

Wątek został zatrzymany.

StopRequested 1

Wątek jest proszony o zatrzymanie. Jest to przeznaczone tylko do użytku wewnętrznego.

Suspended 64

Wątek został zawieszony.

SuspendRequested 2

Wątek jest proszony o wstrzymanie.

Unstarted 8

Metoda Start() nie została wywołana w wątku.

WaitSleepJoin 32

Wątek jest zablokowany. Może to być wynik wywołania metody Sleep(Int32) lub Join(), żądania blokady — na przykład przez wywołanie Enter(Object) metody lub Wait(Object, Int32, Boolean) — lub oczekiwanie na obiekt synchronizacji wątków, taki jak ManualResetEvent.

Uwagi

Wyliczenie ThreadState definiuje zestaw wszystkich możliwych stanów wykonywania dla wątków. Interesuje cię tylko kilka scenariuszy debugowania. Kod nigdy nie powinien używać stanu wątku do synchronizowania działań wątków.

Po utworzeniu wątku znajduje się on w co najmniej jednym ze stanów do momentu zakończenia. Wątki utworzone w środowisku uruchomieniowym języka wspólnego są początkowo w Unstarted stanie, podczas gdy zewnętrzne lub niezarządzane wątki wchodzące w środowisko uruchomieniowe są już w Running stanie . Wątek jest przenoszone ze Unstarted stanu do Running stanu przez wywołanie metody Thread.Start. Gdy wątek opuści Unstarted stan w wyniku wywołania metody Start, nigdy nie może wrócić do Unstarted stanu.

Wątek może być w danym momencie w więcej niż jednym stanie. Jeśli na przykład wątek jest zablokowany w wywołaniu metody Monitor.Wait, a kolejne wywołania Thread.Abort wątku w zablokowanym wątku, zablokowany wątek będzie znajdować się zarówno w stanie , jak WaitSleepJoin i AbortRequested w tym samym czasie. W takim przypadku, gdy tylko wątek powróci z wywołania do Monitor.Wait lub zostanie przerwany, otrzyma ThreadAbortException wartość , aby rozpocząć przerywanie. Nie wszystkie kombinacje ThreadState wartości są prawidłowe, na przykład wątek nie może znajdować się w Aborted stanach i Unstarted .

Wątek nigdy nie może opuścić Stopped stanu.

Ważne

Istnieją dwa wyliczenia stanu wątku: System.Threading.ThreadState i System.Diagnostics.ThreadState.

W poniższej tabeli przedstawiono akcje, które powodują zmianę stanu.

Akcja ThreadState
W środowisku uruchomieniowym języka wspólnego jest tworzony wątek. Unstarted
Inny wątek wywołuje metodę Thread.Start w nowym wątku, a wywołanie zwraca.

Metoda Start nie zwraca się do momentu uruchomienia nowego wątku. Nie ma możliwości poznania, w jakim momencie nowy wątek rozpocznie działanie, podczas wywołania metody Start.
Running
Wywołania wątku Sleep WaitSleepJoin
Wątek wywołuje Monitor.Wait inny obiekt. WaitSleepJoin
Wątek wywołuje Join inny wątek. WaitSleepJoin
Inne wywołania wątku Interrupt Running
Inne wywołania wątku Suspend SuspendRequested
Wątek odpowiada na Suspend żądanie. Suspended
Inne wywołania wątku Resume Running
Inne wywołania wątku Abort AbortRequested
Wątek odpowiada na Abort żądanie. Stopped
Wątek jest przerywany. Stopped

Oprócz stanów wymienionych powyżej istnieje również Background stan, który wskazuje, czy wątek jest uruchomiony w tle, czy na pierwszym planie. Aby uzyskać więcej informacji, zobacz Foreground and Background Threads (Wątki pierwszego planu i tła).

Właściwość Thread.ThreadState wątku zapewnia bieżący stan wątku. Aplikacje muszą używać maski bitowej, aby określić, czy wątek jest uruchomiony. Ponieważ wartość parametru Running ma wartość zero (0), przetestuj, czy wątek jest uruchomiony przy użyciu następującego kodu:

(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0

Dotyczy

Zobacz też