Прослушиватели выполняют функцию обратного вызова при уведомлении о возникновении события. Прослушиватели являются пассивными наблюдателями в том смысле, что ошибки в выполнении обратного вызова прослушивателя не препятствуют выполнению других прослушивателей, реагирующих на одно и то же событие, или выполнению функции, инициировавшей событие.
Выполнение функции обратного вызова продолжается до ее завершения. Если в функции обратного вызова возникает ошибка, выполнение останавливается и управление возвращается к вызывающей функции. Затем выполняются все оставшиеся функции обратного вызова прослушивателя.
Порядок выполнения функций обратного вызова прослушивателей после запуска события не определен. Однако все обратные вызовы прослушивателя выполняются синхронно с инициированием события.
Класс дескриптора notify метод вызывает все прослушиватели перед возвращением выполнения вызвавшей функции notify.
notifyНе изменяйте и не используйте повторно, не копируйте и не используйте передаваемый объект данных события notify, который затем передается в обратный вызов прослушивателя.
Обратные вызовы прослушивателя могут вызывать notify для запуска событий, включая то же событие, которое вызвало обратный вызов. Когда вызывается функция notifyMATLAB ® устанавливает значения свойств объекта данных события, передаваемого функциям обратного вызова. Чтобы эти свойства имели соответствующие значения для последующих обратных вызовов, всегда создавайте новый объект данных события при вызове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