1

我有一个静态类,因此所有方法都是静态的。由于我试图在操作期间跟踪进程的位置,因此我试图定期触发事件以更新 UI。我的班级看起来类似于以下内容:

classdef foo < handle

    events
       Update
    end
    methods(Static)
        function bar1()
            ...
            notify([], 'Update', EvtData(val));
        end
    end
end

问题是当我运行代码并到达该notify([]...行时,我收到以下错误:

未定义的命令/功能“通知”。

我假设这与这是一个静态方法被调用的事实有关:

foo.bar1()

如何在 MatLab 的静态方法中触发/调用事件?

4

1 回答 1

2

MATLAB OOP 中的事件与作为触发事件 ( ) 源的句柄对象相关联notify。如果没有触发您感兴趣的事件的对象,则无法注册事件处理程序 ( addlistener)。

根据类如何适合您的应用程序,也许在您的情况下您可以实现单例模式

我的班级.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
于 2013-06-27T05:31:47.750 回答