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


Состояния потоков

Обновлен: Ноябрь 2007

Свойство ThreadState предоставляет информацию о состоянии потока. Поскольку потоки могут быть в более чем одном состоянии в любой момент времени, значение, хранящееся в свойстве ThreadState, может быть сочетанием значений перечисления ThreadState. Например, если поток заблокируется по вызову метода Wait и другой поток вызывает метод Abort того же потока, то поток находится в состояниях WaitSleepJoin и AbortRequested одновременно.

Изменение состояний потока

После запуска потока можно вызывать его методы для изменения состояния потока. Например, можно остановить поток на фиксированное число миллисекунд, вызвав метод Thread.Sleep. Метод Sleep принимает в качестве параметра период времени в миллисекундах, в течение которого поток будет заблокирован.

Вызов метода Sleep с аргументом Infinite переводит поток в состояние ожидания до тех пор, пока он не будет прерван другим потоком, который вызовет метод Interrupt. Метод Interrupt выводит указанный поток из любого состояния ожидания, в котором он может быть, и вызывает исключение.

Поток можно также приостановить, вызвав метод Suspend. Если поток вызывает метод Suspend для себя, вызов блокируется до тех пор, пока поток не будет восстановлен другим потоком с помощью вызова Resume. Когда поток вызывает метод Suspend для другого потока, вызов не блокируется, и это приводит к приостановке другого потока. Вызов метода Resume выводит другой поток из заблокированного состояния и возобновляет его выполнение. В отличие от метода Sleep метод Suspend не останавливает поток немедленно; поток продолжает выполняться, пока среда выполнения не определит, что достигнута безопасная точка.

Метод Abort останавливает выполняющийся поток путем вызова исключения ThreadAbortException, которое приводит к прекращению потока.

Для получения подробной информации об этих методах см. раздел Thread.

См. также

Основные понятия

Многопоточные приложения

Синхронизация потоков

Параметры и возвращаемые значения для многопоточных процедур

Использование многопоточности для форм и элементов управления

Делегаты и оператор AddressOf

Ссылки

System.Threading

Оператор SyncLock

Другие ресурсы

Многопоточность в компонентах