Прослушиватели выполняют свою функцию обратного вызова, когда уведомлено, которую имело место событие. Прослушиватели являются пассивными наблюдателями в том смысле, что ошибки в выполнении обратного вызова прослушивателя не предотвращают выполнение других прослушивателей, отвечающих на то же событие или выполнение функции, которая инициировала событие.
Выполнение функции обратного вызова продолжается, пока функция не завершается. Если ошибка происходит в функции обратного вызова, остановки выполнения и управление возвращается к функции вызова. Затем любые остающиеся функции обратного вызова прослушивателя выполняются.
Порядок, в котором функции обратного вызова прослушивателей выполняются после увольнения события, не определен. Однако все обратные вызовы прослушивателя выполняются синхронно с увольнением события.
Класс Handle вызовы метода handle.notify
все прослушиватели перед возвращающимся выполнением к функции, который названный notify
.
Обратные вызовы, Которые уведомляет Вызов
Не изменяйте и повторное использование или копия и снова используйте объект данных о событиях, что вы передаете notify
, который затем передается обратному вызову прослушивателя.
Обратные вызовы прослушивателя могут вызвать notify
к триггерным событиям, включая то же событие, которое вызвало обратный вызов. Когда вызовы функции notify
, MATLAB® устанавливает значения свойств объекта данных о событиях, который передается функциям обратного вызова. Чтобы гарантировать, чтобы эти свойства имели соответствующие значения для впоследствии названных обратных вызовов, всегда создавайте новый объект данных о событиях, если вы вызываете notify
с пользовательскими данными о событиях.
Если вы хотите управлять, как ваша программа отвечает на ошибки, используйте оператор try/catch
в своей функции обратного вызова прослушивателя, чтобы обработать ошибки.
Когда вы создаете указатель на функцию в методе класса, контекст метода определяет контекст, в котором выполняется функция. Этот контекст предоставляет функциональный доступ к закрытым и защищенным методам, которые доступны для того класса.
Например, класс UpdateEvt
задает событие под названием Update
и прослушиватель для того события. Обратный вызов прослушивателя является закрытым методом evtCb
.
classdef UpdateEvt < handle events Update end methods function obj = UpdateEvt addlistener(obj,'Update',@evtCb); end end methods (Access = private) function obj = evtCb(obj,varargin) disp('Updated Event Triggered') end end end
Закрытые методы обычно доступны только методами класса. Однако, потому что указатель на функцию создается в методе класса, notify
может выполнить обратный вызов от за пределами класса:
a = UpdateEvt;
a.notify('Update')
Updated Event Triggered