Потоки C#. Дополнительные сведения.

Основные и фоновые потоки

Потоки могут быть основными и фоновыми. Фоновые потоки отличаются от основных потоков тем что фоновые потоки завершаются сразу же после окончания последнего основного потока программы. Основные потоки продолжают работать до своего завершения.

По умолчанию фоновыми становятся все потоки созданные при помощи вызова конструктора класса Thread.

Что бы определить к какому типу относится поток можно использовать свойство Thread.IsBackground:

using System;
using System.Threading;

class Program {
    static void Main() {
        // Вывод в консоль типа потока
        Console.WriteLine(Thread.CurrentThread.IsBackground);

        // Вывод: False
        Console.ReadKey();
    }
}

Для установки типа потока, можно использовать тоже свойство Thread.IsBackground. Изменить его можно в любое время выполнения программы.


Имя потока

Каждому потоку можно назначить уникальное имя при помощи свойства Thread.Name. Это имя может использоваться для отладки программы, т.к. VisualStudio отображает имя потока при отладке. Имя потока задается один раз и после этого не может быть изменено.

При попытке изменить имя потока, которому уже присвоено имя генерируется исключение System.InvalidOperationException.


Состояние потока. Перечисление ThreadState.

Поток может находиться в одном из состояний описываемых перечислением ThreadState. Текущее состояние потока может быть получено при помощи свойства Thread.ThreadState. Перечисление ThreadState содержит следующие члены:

Название членаЗначениеОписание
Aborted256Поток прерван при помощи метода Thread.Abort(). Включает также AbortRequested. Далее поток будет переведен в состояние Stopped.
AbortRequested128Поток прерван при помощи метода Thread.Abort(), но исключение ThreadAbortException еще не было сгенерировано.
Background4Если установлен этот флаг, то поток выполняется в фоновом режиме. Это состояние потока можно также проверить при помощи метода Thread.IsBackground
Running0Поток запущен. Это состояние вызывается при помощи метода Thread.Start(), Thread.Interupt(), Thread.Resume().
Stopped16Поток остановлен.
StopRequested1Поток получил запрос на остановку
Suspended64Поток приостановлен
SuspendRequested2Поток получил запрос на приостановку
Unstarted8Поток был создан, но к нему еще не был применен метод Thread.Start()
WaitSleepJoin32Поток заблокирован в результате вызова метода Join(), Sleep().

Приоритет потока. Перечисление ThreadPriority.

Приоритет потока определяет как часто кванты времени процессора будут выделяться потоку по сравнению с другими потоками. Приоритет потока задается свойством Thread.Priority. Оно имеет тип перечисления ThreadPriority и может принимать одно из значений представленных в таблице ниже:

Название поляЗначениеОписание
AboveNormal3Выше нормального
BelowNormal1Ниже нормального
Highest4Высший приоритет
Lowest0Низший приоритет
Normal2Нормальный приоритет

Ссылки

Основные сведения о потоках C#.

avatar
5000
  Подписаться  
Уведомление о