Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 128

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 122 123 124 125 126 127 < 128 > 129 130 131 132 133 134 .. 320 >> Следующая

перед запуском потока
TimerCallback Делегат для объектов Timer
WaitCallback Делегат, который представляет метод обратного вызова для рабочих элементов
ThreadPool
Работа с классом Thread
Самый простой тип в пространстве имен System-Threading— это класс Thread. Этот класс в ,NET — не более чем объектная оболочка вокруг некоторого этапа выполнения программы внутри домена приложения. В этом типе предусмотрено значительное число членов (как стгїіігчесічч-іх, так и обычных) для создания текущим потоком новых потоков, а также для приостановки, полной остановки и удаления указанного потока. Наиболее важные статические члены этого типа представлены в табл. 6.4.
Таблица 6,4. Статические члены типа Thread Статический член Назначение
CurrentThread Это свойство только для чтения возвращает ссылку на поток,
выполняемый в настоящее время
значение для указанного слота
в текущем потоке
GetDomainO GetDomainlDQ Возвращает ссылку на домен приложения (идентификатор домена
приложения), в рамках которого работает указанный поток
Приостанавливает выполнение текущего потока на указанное пользователем время
Обычные члены (обращение к которым производится через объект класса Thread) представлены в табл. 6.5.
Таблица 6.5. Обычные члены типа Thread Член Назначение
IsAlive Это свойство возвращает «true» или «false» в зависимости от того, запущен поток
или нет
IsBackground Свойство предназначено для получения или установки значения, которое показывает, является ли этот поток фоновым
Name Свойство для установки дружественного текстового имени потока
Priority Позволяет получить/установить приоритет потока (используются значения
из перечисления ThreadPrority)
Пространство имен System/Threading 30S
Член Назначение
ThreadState Возвращает информацию о состоянии потока (используются значения
из перечисления ThreadState)
InterruptO Прерывает работу текущего потока
join(; Ждет появления другого потока (ими указанный промежуток времени)
и завершается
ResumeQ Продолжает работу после приостановки работы потока
Start() Начинает выполнение потока, определенного делегатом ThreadStart:
SuspendQ Приостанавливает выполнение потока. Если выполнение потока уже
приостановлено, то игнорируется
Запуск вторичных потоков
Если мы решили использовать в нашем приложении дополнительные потоки, нам потребуется класс Thread и специальный делегат для работы с потоками, называв мый ThreadStart. Сам процесс создания дополнительных потоков в приложении очень прост. Прежде всего нам необходимо решить, какая функция будет выполнять у нас фоновую работу. Для большей наглядности мы создадим в нашем примере специальный вспомогательный класс, выводящий на консоль набор симво лов при помощи метода DoSomeWorkС):
internal class Worker-Class {
public void DoSomeWork0 {
II Выводим на консоль информацию о рабочем потоке Console.WriteLineC'ID of worker thread is: {0}",
Thread.CurrentThread.GetHashCodet));
Il Выполняем некоторые действия Console.WriteCWorker says: "}: for (int 1 - о: і < 10; і++) {
Console.Writeti+ ", "):
]
Console. WritELineO;
Теперь предположим, что у нас есть еще один класс — Md і nu ass, в котором создается новый объект класса WorkerClass. При этом пусть согласно техническому заданию нам необходимо сделать так, чтобы все свои действия WorkerCl ass выполнял в рамках отдельного потока. Это можно сделать следующим образом (обратите внимание на применение типов Thread и ThreadStart):
putiiiLclass MainClass {
public static int Main(string[] args)
{
II Выводим на консоль информацию о текущей потоке Console.WriteuneriD of primary thread is: {0}",
Thread.CurrentThread.GetHashCode(});
//создаем объект класса Worker-Class
306 Глава 6 • Сборки, потоки и домены приложений
Iе' D:\.CSharpBook\Labs\Chapter 6\uJmplpMullJTIir«
ID of primary thread is: 2 ID of йогові' thread is- 11 ifyorkep says: 0, 1, 2, 3, Л* Ь, 7. Press any key to continue 8, 9, Ё
JJ A
Рис. 6.40. Создание дополнительного потока
Именованные потоки
Одна из интересных особенностей класса Th read заключается в что этот класс позволяет присваивать потоку дружественное текстовое имя. Для этого используется
свойство Name. Например, наш класс MainClass может выглядеть следующим образом:
public class MainClass ¦(
public static int Main{string[] args) {
Il Присваиваем имя текущему потоку
Thread priiraryThread = Thread.CurrentThread;
primary Th read. Name = "Boss man":
Console.WriteLineCId of {0} is {1}". pnmaryThread.Name.
primaryThread.GethashCodeO);
// Далее тот же код. что и раньше
}
!
Ju
ID of Doss nan із: 2 ID of uerker іЬґєаіі із! 11 Worker says: 0, I, ?.. 3, Л, 5. Ь. ?, B, Press eny key to continue 9,
14 \ 71 І
Рис. 6.41. Именованный поток
«orkcrCUss w - new Worker-Osss О;
// А теперь СОЗДаен и запускаем фоновый поток
Thread backgroungThread = new ThreedCnew ThreadStart(w.DoSonieWork)):
backg roundTh read.Sta rt():
return
}
}
Результат работы нашего приложения представлен на рис. 6.40. Обратите внимание: у нас действительно работают два отдельных потока, обладающие уникальными идентификаторами.
Предыдущая << 1 .. 122 123 124 125 126 127 < 128 > 129 130 131 132 133 134 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100