Поделиться через


ThreadState Перечисление

Определение

Задает состояния выполнения объекта Thread.

Это перечисление поддерживает побитовую комбинацию значений его членов.

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
Наследование
ThreadState
Атрибуты

Поля

Aborted 256

Состояние потока включает в себя значение AbortRequested, и поток теперь не выполняет работу, но его состояние еще не изменилось на Stopped.

AbortRequested 128

Метод Abort(Object) был вызван для потока, но поток еще не получил исключение ThreadAbortException, которое попытается завершить его.

Background 4

Поток выполняется как фоновый поток, в противоположность потокам переднего плана. Это состояние управляется заданием свойства IsBackground.

Running 0

Поток был запущен, но не останавливался.

Stopped 16

Поток был остановлен.

StopRequested 1

Поток получает запрос на остановку. Предназначено только для внутреннего использования.

Suspended 64

Поток был приостановлен.

SuspendRequested 2

Запрашивается приостановка работы потока.

Unstarted 8

Метод Start() не был вызван для потока.

WaitSleepJoin 32

Поток заблокирован. Это может произойти в результате вызова метода Sleep(Int32) или метода Join(), в результате запроса блокировки, например при вызове метода Enter(Object) или Wait(Object, Int32, Boolean) или в результате ожидания объекта синхронизации потока, такого как ManualResetEvent.

Комментарии

Перечисление ThreadState определяет набор всех возможных состояний выполнения для потоков. Он представляет интерес только в нескольких сценариях отладки. Код никогда не должен использовать состояние потока для синхронизации действий потоков.

После создания потока он находится по крайней мере в одном из состояний, пока не завершит работу. Потоки, созданные в среде CLR, изначально находятся в Unstarted состоянии , а внешние или неуправляемые потоки, поступающие в среду выполнения, уже находятся в Running состоянии . Поток переходит из состояния в Unstarted состояние путем Running вызова Thread.Start. Если поток был выведен из состояния Unstarted в результате вызова метода Start, он не может вернуться в состояние Unstarted ни при каких условиях.

Поток может находиться в нескольких состояниях в данный момент времени. Например, если поток блокируется при вызове Monitor.Wait, а другой поток вызывает Thread.Abort заблокированный поток, заблокированный поток будет одновременно находиться в WaitSleepJoin состояниях и AbortRequested . В этом случае, как только поток возвращается из вызова Monitor.Wait или прерывается, он получит ThreadAbortException , чтобы начать прерывание. Не все сочетания значений ThreadState являются допустимыми; например, поток не может находиться в обоих состояниях Aborted и Unstarted .

Поток никогда не может выйти из состояния Stopped .

Важно!

Существует два перечисления состояния потока: System.Threading.ThreadState и System.Diagnostics.ThreadState.

В следующей таблице показаны действия, вызывающие изменение состояния.

Действие ThreadState
Поток создается в среде CLR. Unstarted
Другой поток вызывает Thread.Start метод в новом потоке, и вызов возвращает .

Метод Start не возвращается, пока не начнется выполнение нового потока. Невозможно узнать, в какой момент новый поток начнет выполняться во время вызова Start.
Running
Вызовы потока Sleep WaitSleepJoin
Поток вызывает Monitor.Wait другого объекта. WaitSleepJoin
Поток вызывает Join другого потока. WaitSleepJoin
Вызовы другого потока Interrupt Running
Вызовы другого потока Suspend SuspendRequested
Поток отвечает на запрос Suspend. Suspended
Вызовы другого потока Resume Running
Вызовы другого потока Abort AbortRequested
Поток отвечает на Abort запрос. Stopped
Поток завершается. Stopped

Помимо указанных выше состояний, существует также Background состояние , которое указывает, выполняется ли поток на фоновом или переднем плане. См. дополнительные сведения об основных и фоновых потоках.

Свойство Thread.ThreadState потока предоставляет текущее состояние потока. Приложения должны использовать битовую маску, чтобы определить, выполняется ли поток. Так как значение для Running равно нулю (0), проверьте, выполняется ли поток, с помощью следующего кода:

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

Применяется к

См. также раздел