Передача и получение специальных данных о состоянии

Чтобы завершить рассмотрение темы асинхронных делегатов, осталось рассказать

о последнем аргументе, который может передаваться методу Beginlnvoke () (и в качестве которого пока что предоставлялось значение null). Этот параметр позволяет передавать методу обратного вызова из главного потока дополнительную информацию о состоянии. Из-за того, что этот аргумент прототипируется как System.Object, с его помощью методу обратного вызова можно передавать какой угодно тип данных, главное, чтобы метод знал, чего ожидать. Для демонстрации предположим, что нужно, чтобы главный поток передавал методу AddComplete () специальное текстовое сообщение:

static void Main(string [] args)

{

IAsyncResult iftAR = b.BeginInvoke(10, 10,

new AsyncCallback(AddComplete),

"Метод Main() thanks you for adding these numbers. ");

}

Для получения этих данных в AddComplete() достаточно воспользоваться свойством AsyncState входного параметра IAsyncResult. Важно обратить внимание на то, что далее потребуется выполнять операцию явного приведения, поэтому базовый тип, возвращаемый из AsyncState, должен выглядеть в главном и вторичном потоке одинаково:

static void AddComplete(IAsyncResult itfAR)

{

// Извлечение информационного объекта и его приведение к типу string.

string msg = (string)itfAR.AsyncState;

Console.WriteLine(msg);

}

На рис. 3 показано, как после этого будет выглядеть вывод приложения.

Рис. 3. Передача и получение специальных данных о состоянии


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: