Член уровня экземпляра Описание
IsAlive Возвращает логическое значение, сообщающее о том, запущен ли данный поток
IsBackground Читает или устанавливает значение, сообщающее о том, является ли данный поток "фоновым" (дополнительные подробности будут предложены чуть позже)
Name Позволяет задать понятное строковое имя потока
Priority Читает или устанавливает приоритет потока, которому может быть назначено значение из перечня ThreadPriority
ThreadState Читает информацию о состоянии потока, которая может принимать значения из перечня ThreadState
Abort Дает указание среде CLR завершить поток как можно быстрее
InterruptВыводит (например, путем активизации) текущий поток из периода ожидания
Join Блокирует вызывающий поток до завершения указанного потока (того, для которого вызывается Join)
Resume Возобновляет выполнение приостановленного ранее потока  
Start Дает указание среде CLR как можно быстрее начать выполнение потока
Suspend Приостанавливает выполнение потока. Если поток уже приостановлен, вызов Suspend игнорируется
<p>Получение информации об отдельном потоке</p>

Напомним, что точка входа компоновочного блока (т.е. метод Main) при выполнении оказывается в первичном потоке. Чтобы привести типичный пример использования типа Thread, предположим, что у нас есть новое консольное приложение с именем ThreadState. Вы знаете, что статическое свойство Thread.СurrentThread позволяет получить тип Thread, представляющий выполняемый в настоящий момент поток. Получив текущий поток, вы можете вывести на экран различную информацию о потоке.

// Не забудьте указать 'using' для пространства имен System.Threading.

static void Main(string[] args) {

 Console.WriteLine("***** Информация первичного потока *****\n");

 // Получение текущего потока и назначение ему имени.

 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. Сбор статистики о потоке

<p>Свойство Name</p>

Приведенный выше программный код достаточно понятен, но обратите внимание на то, что класс Thread предлагает свойство с именем Name (имя). Если вы не установите для него значения, свойство Name будет возвращать пустую строку. Но, назначив данному объекту Thread в качестве имени понятную строку, вы можете сильно упростить процесс отладки. В Visual Studio 2005 в режиме отладки можно использовать окно Threads (Потоки), доступ к которому можно получить, выбрав Debug->Windows->Threads из меню. Как показано на рис. 14.6, в этом окне можно по имени идентифицировать поток, который следует проанализировать.

Перейти на страницу:

Похожие книги