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

Определение

Задает состояния выполнения объекта Thread.Specifies the execution states of a Thread.

Это перечисление имеет атрибут FlagsAttribute, который разрешает побитовое сочетание значений его элементов.

public enum class ThreadState
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
type ThreadState = 
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState = 
[<System.Flags>]
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.The thread state includes AbortRequested and the thread is now dead, but its state has not yet changed to Stopped.

AbortRequested 128

Метод Abort(Object) был вызван для потока, но поток еще не получил исключение ThreadAbortException, которое попытается завершить его.The Abort(Object) method has been invoked on the thread, but the thread has not yet received the pending ThreadAbortException that will attempt to terminate it.

Background 4

Поток выполняется как фоновый поток, в противоположность потокам переднего плана.The thread is being executed as a background thread, as opposed to a foreground thread. Это состояние управляется заданием свойства IsBackground.This state is controlled by setting the IsBackground property.

Running 0

Поток был запущен, но не останавливался.The thread has been started and not yet stopped.

Stopped 16

Поток был остановлен.The thread has stopped.

StopRequested 1

Поток получает запрос на остановку.The thread is being requested to stop. Предназначено только для внутреннего использования.This is for internal use only.

Suspended 64

Поток был приостановлен.The thread has been suspended.

SuspendRequested 2

Запрашивается приостановка работы потока.The thread is being requested to suspend.

Unstarted 8

Метод Start() не был вызван для потока.The Start() method has not been invoked on the thread.

WaitSleepJoin 32

Поток заблокирован.The thread is blocked. Это может произойти в результате вызова метода Sleep(Int32) или метода Join(), в результате запроса блокировки, например при вызове метода Enter(Object) или Wait(Object, Int32, Boolean) или в результате ожидания объекта синхронизации потока, такого как ManualResetEvent.This could be the result of calling Sleep(Int32) or Join(), of requesting a lock - for example, by calling Enter(Object) or Wait(Object, Int32, Boolean) - or of waiting on a thread synchronization object such as ManualResetEvent.

Комментарии

ThreadStateПеречисление определяет набор всех возможных состояний выполнения для потоков.The ThreadState enumeration defines a set of all possible execution states for threads. Он представляет интерес только в некоторых сценариях отладки.It's of interest only in a few debugging scenarios. Код никогда не должен использовать состояние потока для синхронизации действий потоков.Your code should never use the thread state to synchronize the activities of threads.

После создания потока он находится по крайней мере в одном из состояний, пока не завершится.Once a thread is created, it's in at least one of the states until it terminates. Потоки, созданные в среде CLR, изначально находятся в Unstarted состоянии, в то время как внешние или неуправляемые потоки, входящие в среду выполнения, уже находятся в Running состоянии.Threads created within the common language runtime are initially in the Unstarted state, while external, or unmanaged, threads that come into the runtime are already in the Running state. Поток переходит из Unstarted состояния в Running состояние путем вызова Thread.Start .A thread is transitioned from the Unstarted state into the Running state by calling Thread.Start. Если поток был выведен из состояния Unstarted в результате вызова метода Start, он не может вернуться в состояние Unstarted ни при каких условиях.Once a thread leaves the Unstarted state as the result of a call to Start, it can never return to the Unstarted state.

Поток может находиться в более чем одном состоянии в определенный момент времени.A thread can be in more than one state at a given time. Например, если поток заблокирован при вызове Monitor.Wait , а другой поток вызывает Thread.Abort заблокированный поток, заблокированный поток будет одновременно находиться в обоих WaitSleepJoin AbortRequested состояниях и.For example, if a thread is blocked on a call to Monitor.Wait, and another thread calls Thread.Abort on the blocked thread, the blocked thread will be in both the WaitSleepJoin and AbortRequested states at the same time. В этом случае, как только поток вернется из вызова Monitor.Wait или прерывается, он получит, ThreadAbortException чтобы начать прерывание.In this case, as soon as the thread returns from the call to Monitor.Wait or is interrupted, it will receive the ThreadAbortException to begin aborting. Не все сочетания ThreadState значений допустимы, например, поток не может находиться в Aborted Unstarted состоянии и.Not all combinations of ThreadState values are valid; for example, a thread cannot be in both the Aborted and Unstarted states.

Поток никогда не может выйти из состояния Stopped .A thread can never leave the Stopped state.

Важно!

Существует два перечисления состояния потока: System.Threading.ThreadState и System.Diagnostics.ThreadState .There are two thread state enumerations: System.Threading.ThreadState and System.Diagnostics.ThreadState.

В следующей таблице показаны действия, которые приводят к изменению состояния.The following table shows the actions that cause a change of state.

ДействиеAction ThreadState ThreadState
Поток создается в среде CLR.A thread is created within the common language runtime. Unstarted
Другой поток вызывает Thread.Start метод в новом потоке, а вызов возвращает.Another thread calls the Thread.Start method on the new thread, and the call returns.

StartМетод не возвращает значение до начала выполнения нового потока.The Start method does not return until the new thread has started running. Нет способа узнать, в какой точке будет запущен новый поток, во время вызова Start .There is no way to know at what point the new thread will start running, during the call to Start.
Running
Поток вызывает метод. SleepThe thread calls Sleep WaitSleepJoin
Поток вызывает Monitor.Wait другого объекта.The thread calls Monitor.Wait on another object. WaitSleepJoin
Поток вызывает Join другого потока.The thread calls Join on another thread. WaitSleepJoin
Другой поток вызывает метод InterruptAnother thread calls Interrupt Running
Другой поток вызывает метод SuspendAnother thread calls Suspend SuspendRequested
Поток отвечает на запрос Suspend.The thread responds to a Suspend request. Suspended
Другой поток вызывает метод ResumeAnother thread calls Resume Running
Другой поток вызывает метод AbortAnother thread calls Abort AbortRequested
Поток отвечает на Abort запрос.The thread responds to an Abort request. Stopped
Поток завершен.A thread is terminated. Stopped

Помимо упомянутых выше состояний, существует также Background состояние, которое указывает, выполняется ли поток в фоновом или переднем плане.In addition to the states noted above, there is also the Background state, which indicates whether the thread is running in the background or foreground. См. дополнительные сведения об основных и фоновых потоках.For more information, see Foreground and Background Threads.

Thread.ThreadStateСвойство потока предоставляет текущее состояние потока.The Thread.ThreadState property of a thread provides the current state of a thread. Для определения того, работает ли поток, приложения должны использовать битовую маску.Applications must use a bit mask to determine whether a thread is running. Поскольку значение для Running равно нулю (0), проверьте, работает ли поток с помощью следующего кода:Since the value for Running is zero (0), test whether a thread is running by the following code:

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

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

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