簡體   English   中英

如何在MatLab的靜態方法中調用事件?

[英]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模式

MyClass.m

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

MATLAB

>> MyClass.func
>> MyClass.registerListener(@(o,e)disp('updated'))
>> MyClass.func
updated
>> MyClass.func
updated

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM