Студопедия

КАТЕГОРИИ:


Архитектура-(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)

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

Объект, используемый для событий, представляет собой экземпляр класса System.Timers.Timer. При инициализации этого объекта задается интервал времени (в миллисекундах). После того как объект Timer запускается посредством вызова его метода Start(), генерируется последовательность событий, отстоящих друг от друга во времени на заданную величину интервала. Функция Main() инициализирует объект Timer с временным интервалом, равным 100 миллисекундам, поэтому после запуска он генерирует события с частотой 10 раз в секунду:

static void Main(string[] args)

{

Timer myTimer = new Timer (100);

Объект Timer обладает событием, которое называется Elapsed (истек интервал), что можно увидеть, воспользовавшись окном Object Browser, представленным на рисунке слева. Сигнатура, необходимая для обработчика рассматриваемого вида событий, соответствует типу делегата System.Timers. ElapsedEventHandler, который является одним из стандартных делегатов, определенных в.NET Framework. Этот делегат может использоваться для функций, обладающих следующей сигнатурой:

void functionName(object source, ElapsedEventArgs e);

Объект Timer передает ссылку на самого себя в первом параметре и экземпляр объекта ElapsedEventArgs — во втором. На данном этапе можно не обращать на эти параметры никакого внимания — позже мы вернемся к их рассмотрению. В нашем коде имеется метод с совпадающей сигнатурой:

static void WriteChar(object source, ElapsedEventArgs e)

{

Console.Write(displayString[counter++ % displayString.Length]);

}

Данный метод использует два статических поля класса Class1 — counter и displayString — для вывода отдельного символа. При каждом вызове этого метода будет выводиться новый символ. Следующая задача — привязать этот обработчик к событию, т. е. подписаться на событие. С этой целью используется оператор + =, который позволяет включить в событие обработчик в виде нового экземпляра делегата, инициализированного с используемым методом обработчика событий:

static void Main(string[] args)

{

Timer myTimer = new Timer (100);

myTimer.Tick += new EventHandler(WriteChar);

Эта команда (где используется присущий делегатам странный на вид синтаксис) добавляет обработчик в список обработчиков, вызываемых при возникновении события Elapsed. Можно добавлять в этот список сколь угодно много обработчиков, при этом все они должны удовлетворять требуемому критерию. Каждый из этих обработчиков будет вызываться при наступлении события поочередно. Все, что осталось необходимым выполнить в функции Main(),— это запустить таймер:

myTimer.Start();

Поскольку не нужно, чтобы приложение окончилось до того, как будет обработано хотя бы одно событие, то следует приостановить выполнение функции Main(). Простейшим способом такой приостановки является ожидание ввода пользователя, так как выполнение этой команды не сможет завершиться ранее, чем пользователь введет строку текста и/или нажмет клавишу Enter.

Console.ReadLine();

}

Хотя выполнение метода Main() фактически оказывается остановленным, объект продолжает функционировать. При наступлении очередного события он вызывает описанный метод WriteChar, который выполняется параллельно с с выполнением оператора Console.ReadLine ().

<== предыдущая лекция | следующая лекция ==>
Class Class1. Использование событий | Namespace Chl2ExO2
Поделиться с друзьями:


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


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



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




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