Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Работа с делегатом ParameterizedThreadStart
Работа с делегатом ParameterizedThreadStart
Напомним, что делегат ThreadStart может указывать только на методы, возвращающие void и не имеющие аргументов. Во многих случаях этого будет вполне достаточно, но передать данные методу, выполняющемуся во вторичном потоке, вы сможете только с помощью делегата ParameterizedThreadStart. Для примера воссоздадим программную логику проекта AsyncCallbackDelegate, построенного в этой главе выше, но на этот раз используем тип делегата ParameterizedThreadStart.
Сначала создайте новое консольное приложение AddWithThreads и укажите using для пространства имен System.Threading. Поскольку ParameterizedThreadStart может указывать на любой метод, принимающий параметр System.Object, создайте пользовательский тип, содержащий числа для сложения.
class AddParams {
public int a;
public int b;
public AddParams(int numb1, int numb2) {
a = numb1;
b = numb2;
}
}
В классе Program создайте статический метод, который с помощью типа AddParams напечатает сумму соответствующих значений.
public static void Add(object data) {
if (data is AddParams) {
Console.WriteLine("ID потока в Add(): {0}", Thread.CurrentThread.GetHashCode());
AddParams ap = (AddParams)data;
Console.WriteLine("{0} + {1} равно {2}", ар.a, ар.b, ар.a + ар.b);
}
}
Программный код Main() в данном случае предельно прост. Просто используйте ParameterizedThreadStart вместо ThreadStart.
static void Main(string[] args) {
…
Console.WriteLine("***** Сложение с объектами Thread *****");
Console.WriteLine("ID потока в Main(): {0}", Thread.CurrentThread.GetHashCode());
AddParams ap = new AddParams(10, 10);
Thread t = new Thread(new ParameterizedThreadStart(Add));
t.Start(ap);
…
}
Исходный код. Проект AddWithThreads размещен в подкаталоге, соответствующем главе 14.
- Программное создание вторичных потоков
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Лекция 15. Работа с базами данных
- Работа с ресурсами локальной сети
- Эффективная работа с временными файлами сортировки
- Ускоренная работа с индексами
- HR-брендинг: Работа с поколением Y, новые инструменты для коммуникации, развитие корпоративной культуры и еще 9 эффектив...
- Безопасная работа с внешними таблицами
- Работа со строками
- 9.2. Работа прокси-сервера
- 3. Заработок для фотографов: заработать на фото – сайты фотобанков
- Работа с активным документом