[英]How do I invoke an event within a static method in MatLab?
我有一個靜態類,因此所有方法都是靜態的。 由於我試圖跟蹤操作過程中的位置,因此我試圖定期觸發事件以更新UI。 我的課看起來類似於以下內容:
classdef foo < handle
events
Update
end
methods(Static)
function bar1()
...
notify([], 'Update', EvtData(val));
end
end
end
問題是,當我運行代碼並到達notify([]...
行時,出現以下錯誤:
未定義的命令/功能“通知”。
我以為這是一個被稱為這樣的靜態方法的事實:
foo.bar1()
如何在MatLab的靜態方法中觸發/調用事件?
MATLAB OOP中的事件與一個句柄對象相關聯,該句柄對象是觸發事件的源( notify
)。 您必須先注冊一個事件處理程序,否則沒有一個對象觸發您在監聽中感興趣的事件( addlistener
)。
根據類適合您的應用程序的方式,也許您可以實現Singleton模式 :
classdef MyClass < handle
events
Update
end
%# private constructor
methods (Access = private)
function obj = MyClass()
end
end
methods (Static)
%# restrict instantiation of class to one object
function obj = getInstance()
persistent inst;
if isempty(inst)
inst = MyClass();
end
obj = inst;
end
%# register event listener
function registerListener(f)
persistent lh;
if ~isempty(lh)
delete(lh);
end
lh = addlistener(MyClass.getInstance(), 'Update', f);
end
%# some function that will trigger the event
function func()
notify(MyClass.getInstance(), 'Update')
end
end
end
>> MyClass.func
>> MyClass.registerListener(@(o,e)disp('updated'))
>> MyClass.func
updated
>> MyClass.func
updated
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.