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


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
Атрибуты

Поля

Имя Значение Описание
Running 0

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

StopRequested 1

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

SuspendRequested 2

Поток запрашивается для приостановки.

Background 4

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

Unstarted 8

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

Stopped 16

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

WaitSleepJoin 32

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

Suspended 64

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

AbortRequested 128

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

Aborted 256

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

Комментарии

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

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

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

Поток никогда не может оставить 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

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

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