如何从CPU密集型功能更新GUI元素?

时间:2011-12-25 11:12:04

标签: user-interface matlab matlab-figure

这是我的问题,我有GUI和一个函数(func1)写在我的图的.m文件之外。我的GUI上还有一个按钮,当按下启动func1时,现在这个功能非常密集,并且在finsh之前可能需要花费很多时间,这就是为什么我能够在我的GUI上写一些东西的功能(insede a静态文本,例如。)。

我的第一个想法是让func1将一些信息写入GUI可以读取的文本文件中,但为此我需要某种类型的多线程编程哦GUI端,看起来像matlab没有那样的东西。< / p>

在第二个地方,我试图让func1调用一个更新(消息)函数来保存与GUI相关的.m文件,但它不起作用,因为更新是一个子功能,似乎没有办法调用一个在包含它的文件外部进行子进程。

有人可以帮助我吗?抱歉我的英语不好。

1 个答案:

答案 0 :(得分:2)

传递更新UI的对象,像引用一样使用它。

classdef WindowUpdater < handle
    properties(Access=private)
        textBox;
    end

    methods(Access=public)

        function this = WindowUpdater(textBox)
            this.textBox = textBox;
        end

        function Update(this,st)
            set(this.textBox,'String',st);
            drawnow();
        end        
    end

end

使用文本uicontrol

初始化它
h = uicontrol('Style','text');
wu = WindowUpdater( h);

将强化功能写为:

function foo(arg1,arg2,wu)
     %Do some stuff
     wu.Update('Hello world!');
     %Do some more stuff
     wu.Update('Hello world has finished!');
end

这种方法具有巨大的SW优势:

  • 您的代码逻辑与GUI的更新分开:您可以将WindowUpdater替换为将写入控制台行,不执行任何操作的其他MyNewUpdater等。