| Член уровня экземпляра | Описание |
|---|---|
| IsAlive | Возвращает логическое значение, сообщающее о том, запущен ли данный поток |
| IsBackground | Читает или устанавливает значение, сообщающее о том, является ли данный поток "фоновым" (дополнительные подробности будут предложены чуть позже) |
| Name | Позволяет задать понятное строковое имя потока |
| Priority | Читает или устанавливает приоритет потока, которому может быть назначено значение из перечня ThreadPriority |
| ThreadState | Читает информацию о состоянии потока, которая может принимать значения из перечня ThreadState |
| Abort | Дает указание среде CLR завершить поток как можно быстрее |
| Interrupt | Выводит (например, путем активизации) текущий поток из периода ожидания |
| Join | Блокирует вызывающий поток до завершения указанного потока (того, для которого вызывается Join) |
| Resume | Возобновляет выполнение приостановленного ранее потока |
| Start | Дает указание среде CLR как можно быстрее начать выполнение потока |
| Suspend | Приостанавливает выполнение потока. Если поток уже приостановлен, вызов Suspend игнорируется |
Получение информации об отдельном потоке
Напомним, что точка входа компоновочного блока (т.е. метод Main) при выполнении оказывается в первичном потоке. Чтобы привести типичный пример использования типа Thread, предположим, что у нас есть новое консольное приложение с именем ThreadState. Вы знаете, что статическое свойство Thread.СurrentThread позволяет получить тип Thread, представляющий выполняемый в настоящий момент поток. Получив текущий поток, вы можете вывести на экран различную информацию о потоке.
// Не забудьте указать 'using' для пространства имен System.Threading.
static void Main(string[] args) {
Console.WriteLine("**
// Получение текущего потока и назначение ему имени.
Thread primaryThread = Thread.CurrentThread;
primaryThread.Name = "ThePrimaryThread";
// Подробности хостинга домена приложения и контекста.
Console.WriteLine("Имя текущего домена приложения: {0}";
Thread.GetDomain.FriendlyName);
Console.WriteLine("Идентификатор текущего контекста: {0}", Thread.CurrentContext.ContextID);
// Вывод информации о данном потоке.
Console.WriteLine("Имя потока: {0}", primaryThreаd.Name);
Console.WriteLine("Запущен ли поток? {0}", primaryThread.IsAlive);
Console.WriteLine("Уровень приоритета: {0}", primaryThread.Priority);
Console.WriteLine("Состояние потока: {0}", primaryThread.ThreadState);
Console.ReadLine;
}
На рис. 14.5 показан вывод этого приложения.
Рис. 14.5. Сбор статистики о потоке
Свойство Name
Приведенный выше программный код достаточно понятен, но обратите внимание на то, что класс Thread предлагает свойство с именем Name (имя). Если вы не установите для него значения, свойство Name будет возвращать пустую строку. Но, назначив данному объекту Thread в качестве имени понятную строку, вы можете сильно упростить процесс отладки. В Visual Studio 2005 в режиме отладки можно использовать окно Threads (Потоки), доступ к которому можно получить, выбрав Debug->Windows->Threads из меню. Как показано на рис. 14.6, в этом окне можно по имени идентифицировать поток, который следует проанализировать.