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 начало прерывания. Не все сочетания значений являются допустимыми, например поток не может находиться в Aborted обоих ThreadState состояниях и 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

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

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