Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Namespace Chl2ExO2

...

Public class Connection

Как это работает

Class Classl

Namespace Chl2ExO2

Public class Display

Namespace Chl2ExO2

Public class Connection

Namespace Chl2ExO2

Определение событий

Для примера – версия программы немедленной отправки сообщений и создание объекта Connection (соединение), который будет генерировать события объектом Display (вывод).

1.Создать консольное приложение с именем Сh12Ex02 в директории C:\BegCSharp\Chapterl2\.

2.Добавить новый класс Connection в файл Connection. Cs:

using System;

using System.Timers;

{

public delegate void MessageHandler (string messageText);

{

public event MessageHandler Mess age Arrived;

private Timer pollTimer;

public Connection()

{

pollTimer = new Timer (100);

pollTimer.Elapsed += newElapSedEventHandler(CheckForMessage);

}

public void Connect()

{

pollTimer.Start();

}

public void Disconnect()

{

pollTimer.Stop();

}

private void CheckForMessage(object source, E1aPsedEvent Args e)

{

Console.Write(“Checking for new massage.”);

Random random= new Random();

if ((random.Next(9) == 0) && (MessageArrived!= null))

{

MessageArrived(“Hello Mum”);

}

}

}

}

3. Добавьте новый класс — Display — в файл Display.cs:

using System;

{

{

public void DisplayMessage(string message)

{

Console.WriteLine(“Message arrived: (0)”, message);

}

}

}

4. Внесите следующие изменения в файл Class1.cs:

using System;

{

{

static void Main(string[] args)

{

Connection myConnection = new Connection ();

Display myDisplay = new Display ();

myConnection.MessageArrived +=

new MessageHandler (myDisplay.DisplayMessage);

myConnection.Connect();

Console.ReadLine();

}

}

}

5. Запустите приложение

Класс, который выполняет львиную долю работы в данном приложении,— это класс Connection. Объект Timer используется экземплярами этого класса во многом аналогично тому, как он использовался в первом приведенном в данной главе примере, т.е. инициализируется конструктором класса и предоставляет доступ к информации о его состоянии (включен или выключен) через функции Connect() и Disconnect():

{

private Timer pollTimer;

public Connection()

{

pollTimer = new Timer (100);

pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);

}

public void Connect()

{

pollTimer.Start();

}

public void Disconnect()

{

pollTimer.Stop();

}

}

Кроме того, в конструкторе регистрируется обработчик событий для события Elapsed — точно так же, как это делалось в первом примере. Метод обработчика — CheckForMessage () — будет генерировать событие в среднем один раз на десять вызовов. Но прежде чем перейти к рассмотрению соответствующего кода, следует познакомиться с собственно определением события.

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

{

public delegate void MessageHandler (string messageText);

Этот тип делегата, которому присвоено имя MessageHandler, определяет сигнатуру функции типа void, обладающей одним параметром типа String. Этот параметр может быть использован для передачи объекту Display сообщения, полученного от объекта Connection.

После описания делегата (либо использования подходящего делегата, описанного ранее) появляется возможность определить собственно событие как член класса Connection:

<== предыдущая лекция | следующая лекция ==>
Как это работает | Public class Display
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 259; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.