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