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

Определение

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

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

public enum class ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
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.ThreadStateThere 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 ThreadStateThreadState
Поток создается в среде 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

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

Дополнительно