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