Программирование >>  Программирование с использованием ajax 

1 ... 120 121 122 [ 123 ] 124 125 126 ... 396


static void Main(string[] args) {

Connection myConnection = new Connection(); Display myDisplay = new Display();

myConnection.MessageArrived += new MessageHandler(myDisplay.DisplayMessage); myConnection.Connect (); Console.ReadKey 0;

Здесь после запуска процесса с помощью метода Connect () объекта Connection вызывается метод Console .ReadKey () для приостановки процесса обработки в Main ().

Универсальные обработчики событий

Делегат, который демонстрировался ранее для события Timer .Elapsed, содержал два параметра, которые являются параметрами очень часто встречающегося в обработчиках событий типа, а именно:

□ object source - ссылка на объект, который сгенерировал событие;

□ ElapsedEventArgs е - параметры, отправленные событием.

Причина, по которой тип object используется в данном событии и на самом деле во многих других событиях, состоит в том, что очень часто требуется использовать один обработчик событий для нескольких идентичных событий, генерируемых разными объектами, и при этом все равно знать, какой конкретно объект сгенерировал данное событие.

Чтобы лучше объяснить и проиллюстрировать это, в следующем практическом занятии предлагается немного расширить предыдущий пример.

Практическое занятие Применение универсального

обработчика событий

1. Создайте новое консольное приложение по имени СЫЗЕхО3 и сохраните его в каталоге С: \BegVCSharp\Chapterl3.

2. Скопируйте код из файлов Program.cs, Connection.cs и Display.cs проекта Chl3Ex02 и замените названия пространств имен в каждом из них с СЫЗЕх02 на СЫЗЕхОЗ.

3. Добавьте новый класс MessageArrivedEventArgs и измените код в представляющем его файле MessageArrivedEventArgs . cs следующим образом:

namespace Chl3Ex03 {

public class MessageArrivedEventArgs : EventArgs {

private string message; public string Message {

get {

return message;



5. Измените содержимое файла Display. cs, как показано ниже:

public void DisplayMessage(Connection source, MessageArrivedEventArgs e) {

Console.WriteLine( Message arrived from: {0} , source.Name);

Поступило новое сообщение Console.WriteLine( Message Text: {0} , e.Message);

Вывод текста сообщения

6. В завершение измените код в файле Program, cs следующим образом:

public MessageArrivedEventArgs() {

message = No message sent. ;

Сообщения не отправлялись

public MessageArrivedEventArgs(string newMessage) {

message = newMessage;

4. Измените код в файле Connection. cs следующим образом:

namespace Chl3Ex03 {

public delegate void MessageHandler (Connection source,

MessageArrivedEventArgs e) ;

public class Connection {

public event MessageHandler MessageArrived; private string name; public string Name {

get {

return name;

set {

name = value;

private void CheckForMessage(object source, EventArgs e) {

Console.WriteLine( Checking for new messages. );

Проверка поступления новых сообщений if ((random.Next(9) ==0) && (MessageArrived !=null)) {

MessageArrived (this, new MessageArrivedEventArgs ( Hello Mum! )) ;



static void Main(string[] args) {

Connection myConnectionl = new Connection(); myConnectionl.Name = First connection. ;

Первое подключение Connection myConnection2 = new Connection(); myConnection2.Name = Second connection. ;

Второе подключение Display myDisplay = new Display ();

myConnectionl .MessageArrived += new MessageHandler (myDisplay. DisplayMessage); myConnection2.MessageArrived += new MessageHandler (myDisplay.DisplayMessage); myConnectionl.Connect(); myConnection2.Connect(); Console.ReadKey();

7. Запустите приложение. На рис. 13.7 показан результат, который должен получиться.


Рис. 13.7. Приложение ChlSExOS в действии

Описание полученных результатов

Путем отправки ссылки на генерирующий событие объект в виде одного из параметров обработчика событий можно настраивать ответ этого обработчика отдельным объектам. Эта ссылка открывает доступ к исходному объекту и его свойствам включительно.

Отправкой параметров, содержащихся в классе, который наследуется от System. EventArgs (как это делает класс ElapsedEventArgs), можно предоставлять любую необходимую информацию (вроде параметра Message в классе MessageArrivedEventArgs).

Вдобавок эти параметры будут выигрывать от полиморфизма. Например, обработчик для события MessageArrived можно было бы определить так:

public void DisplayMessage(object source, EventArgs e) {

Console.WriteLine( Message arrived from: {0} ,

((Connection)source).Name); Console.WriteLine( Message Text: {0} ,

((MessageArrivedEventArgs)e).Message);



1 ... 120 121 122 [ 123 ] 124 125 126 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика