Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция17 Безопасность 2018.pptx
Скачиваний:
16
Добавлен:
08.12.2019
Размер:
138.44 Кб
Скачать

События

События и обработчики событий - основа реализации графического интерфейса пользователя и работы всей программы:

реакция программы на события

таймера, мыши, клавиатуры, создания,

активизации или закрытия окна и т.д.

1

События. Определения

Методом сообщения системе о внешнем событии является аппаратное прерывание.

Идея прерывания (interrupt)- в момент события вызывать некоторую подпрограмму, которая выполнит действия по обработке события.

Прерывания, вызванные внутренними

событиями (в процессоре),

называют исключениями (exception).

Внешние прерывания - просто прерывания

Внутренние – исключения

2

Прерывания

Процессоры различают N типов прерываний.

Каждому типу соответствует процедура - обработчик.

Адреса точек входа всех процедур собраны в таблицу, называемую таблицей векторов прерываний.

Процессор получает запрос на прерывание.

Процессор завершает исполнение текущей команды и выставляет сигнал готовности к прерыванию.

Внешнее устройство выставляет на шине данных номер вектора прерывания.

Процессор считывает номер и вызывает соответствующую процедуру из таблицы векторов прерываний.

3

События. Нажатие кнопки мыши

В процедуре-обработчике (ОС) происходит поиск окна, находящегося под курсором мыши.

Если окно найдено, то данное событие посылается в очередь обработки сообщений этого окна.

Далее, в зависимости от типа окна, могут генерироваться дополнительные события.

Например, если окно является кнопкой, то дополнительно генерируется событие нажатия на кнопку (обработчик не содержит координат курсора - просто произведено нажатие на данную кнопку).

4

События

Обработчик события:

private void button1_Click(object sender, EventArgs

e)

{ MessageBox.Show("Была нажата кнопка"); }

В обработчик события передается sender

(содержит указатель на источник события) и дополнительные аргументы – объект e

можно использовать эти данные для обработки событий.

Пример объявления события:

public class MyClass

{ public event EventHandler MyEvent; }

EventHandler - делегат, определяющий тип обработчика

событий.

Подписка объекта на событие :

myClass.MyEvent += new EventHandler(Handler);

5

Определения

В C# событие определяется следующим образом:

с событием связывается

автоматическое извещение о

некотором происшедшем действии;

для объекта, который должен реагировать на какое-либо событие

регистрируется обработчик события;

обработчики событий создаются на основе делегатов;

когда событие происходит, вызываются все зарегистрированные обработчики.

6

Определения

Объекты, способные генерировать события, называются издателями.

Издатели - источники событий.

Объекты, зарегистрированные на уведомление о событиях (подписавшиеся на события), называются подписчиками, или абонентами.

Подписчики получают сообщения о событии.

У одного события м.б. несколько подписчиков.

7

Каждый подписчик должен иметь метод для обработки события подписки – обработчик события.

В случае события выполняются все обработчики.

Подписчик может зарегистрироваться на

несколько событий

у подписчика м.б. несколько различных обработчиков.

Объявление события

В C# событие объявляется как член класса.

Можно понимать событие как

специализированный многоадресный делегат, предназначенный для обработки событий.

8

Синтаксис объявления события имеет вид:

access event delegate_event event_name;

Здесь

delegate_event – имя делегата,

используемого для поддержки события,event_name - имя создаваемого объекта

события.

Данный делегат нужен для хранения ссылок

на имеющиеся обработчики данного события

Все обработчики активизируются с

помощью указанного в объявлении события делегата.

9

Генерация и обработка события

Пример 1. Иллюстрация схемы генерации и обработки события.

using System;

//объявление делегата для определения события

delegate void MyEventHandler ();

//класс, в котором инициируется событие

class MyEvent

{

//объявление события

public event MyEventHandler activate;

10