Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
My_shpory_Ivan_Ivanich (2).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
149.35 Кб
Скачать

IAsyncResult

Представляет состояние асинхронной операции. Его используют для отслеживания выполнения асинхронного вызова.

Свойства:

IsCompleted – Возвращает значение, показывающее, выполнена ли асинхронная операция.

AsyncCallback

Ссылается на метод, который должен вызываться при завершении соответствующей асинхронной операции.

Для обработки результатов асинхронной операции в отдельном потоке используется делегат AsyncCallback. Делегат AsyncCallback представляет метод обратного вызова, который вызывается при завершении асинхронной операции.Метод обратного вызова принимает параметр IAsyncResult, который впоследствии используется для получения результатов асинхронной операции.

Параметр object

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

четыре основных способа использования методов BeginInvoke и EndInvoke для выполнения асинхронных вызовов. После вызова метода BeginInvoke можно делать следующее.

  • Выполнить какие-либо операции, а затем вызвать метод EndInvoke для блокировки потока до тех пор, пока вызов не завершится.

  • Получить объект WaitHandle с помощью свойства IAsyncResult.AsyncWaitHandle, использовать метод WaitOne для блокирования выполнения до получения сигналаWaitHandle, а затем вызвать метод EndInvoke.

  • Периодически опрашивать интерфейс IAsyncResult, возвращаемый методом BeginInvoke, для определения момента завершения асинхронного вызова, и затем вызвать метод EndInvoke.

  • Передать в метод BeginInvoke делегат для метода обратного вызова. Этот метод выполняется для потока ThreadPool после выполнения асинхронного вызова.Метод обратного вызова вызывает метод EndInvoke.

21. События, обратный вызов, типовая схема реализации события

События позволяют классу или объекту уведомлять другие классы или объекты о возникновении каких-либо ситуаций. Класс, отправляющий (или вызывающий) событие, называется издателем, а классы, принимающие (илиобрабатывающие) событие, называются подписчиками.

В C# в стандартном приложении Windows Forms или веб-приложении пользователь подписывается на события, вызываемые элементами управления, такими как кнопки и поля со списками.

События имеют следующие свойства.

  • Издатель определяет момент вызова события, подписчики определяют предпринятое ответное действие.

  • У события может быть несколько подписчиков. Подписчик может обрабатывать несколько событий от нескольких издателей.

  • События, не имеющие подписчиков, никогда не возникают.

  • Обычно события используются для оповещения о действиях пользователя, таких как нажатия кнопок или выбор меню и их пунктов в графическом пользовательском интерфейсе.

  • Если событие имеет несколько подписчиков, то при его возникновении происходит синхронный вызов обработчиков событий. Сведения об асинхронном вызове событий см. в разделе Асинхронный вызов синхронных методов.

  • В библиотеке классов .NET Framework в основе событий лежит делегат EventHandler и базовый класс EventArgs.

Пример объявления события: public event EventHandler Changed;

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

Достоинства:

• Возможность динамического изменения функциональности (подключения и отключения плагинов/модулей при работе программы).

• Возможность неограниченного количества вариантов вызываемой функции без изменения базового (в данном контексте) кода.

• Возможность вставки вызываемой функции не только для альтернативного поведения, но и в качестве ещё одной (промежуточной) подпрограммы — обычно для отслеживания операций или изменения параметров для следующей (вызываемой) функции. Таких независимых «дополнительных звеньев» в цепочке вызовов может быть сколько угодно.

• Поддержка функций обратного вызова в большинстве современных языков программирования общего назначения.

Недостатки:

• Уменьшение производительности, связанной с дополнительными вызовами «обратной функции» — прямо пропорционально «стоимости вызова функции» в среде выполнения и количеству дополнительных вызовов при работе программы.

• Ухудшение читаемости исходного кода — для понимания алгоритма программы необходимо отслеживать всю цепочку вызовов.

Типовая схема реализации события

1)Определение типа для хранения всей дополнительной информации, передаваемой получателем уведомления о событии. Этот класс должен наследоваться от EventArgs. Если вам не надо ничего передавать то можно воспользоваться EventArgs.Empty.

2)Определение члена-события в классе ответственном за него (mailmanager) . public event EventHandler<YourEventArgs> EventName;

3)Определение метода ответственного за уведобление о событии. Внутри него вызов

EventName(this,YourEventArgs);

4)Определение метода, преобразующего входную информацию в желаемое событие

Он ответственнем за создание YourEventArgs и передачу его методу предыдушего пункта .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]