流产回调执行GUI - Drawnow错误

3视图(30天)
你好,
我在一个GUI,工作,我有一个计算非常密集的任务。因此我想添加一个按钮,允许用户取消当前的计算。我读了很多文章解决同样的问题,因此我试着抓住语句实现的。按取消按钮创建一个错误在自己的回调函数和我试图抓住这个错误在其他调包含我的计算。这个度量由循环运行在不同的频率,因此在catch块,我使用了打破这个循环的功能。内循环我也几drawnow命令可以看到取消事件时触发。按我的取消按钮在计算时,我看到我生成的错误,但也matlab生成另一个错误陈述:“错误使用drawnow”/“错误当评估uicontrol回调”。我完全不知道它从哪里来。欢迎任何提示…当时我看到这个消息,matlab仍在循环,这意味着break语句还没有到达…?
谢谢!
巴特

接受的答案

马特无花果
马特无花果 2012年12月14日
我不确定你为什么用错误来取消手术。似乎只有简单的取消按钮设置一个标志,你的操作检查。这是一个简单的例子,我的意思:
函数[]= gui_breakloop ()
%如何阻止一个while循环切换按钮。
年代。图(f =“名字”,“gui_breakloop”,
菜单条的,“没有”,
“numbert”,“关闭”,
“pos”,(100 100 300 150));
年代。pb = uicontrol (“风格”,“切换”,
“单位”,“照片”,
“位置”(130 130),
“回调”@pb_call,
“字符串”,“开始循环”);
S.pb (2) = uicontrol (“风格”,“切换”,
“单位”,“照片”,
“位置”(160 130 130),
“回调”@pb_call2,
“字符串”,“取消”,
“启用”,“关闭”,
“用户数据”,0);
movegui (“中心”)
guidata(顺丰速递,S);%在GUIDATA存储处理。
函数[]= pb_call(变长度输入宗量)
%循环按钮回调
S = guidata (gcbf);
集(S.pb (1),“字符串”,“循环!”)
集(S.pb (2),“启用”,“上”)
暂停(0。)
1
一种= (rand (1000));
暂停(0。)%部队图形刷新
如果get (S.pb (2),“用户数据”)
集(S.pb (1),“字符串”,“没有循环”)
集(S.pb (2),“用户数据”,0)
打破
结束
结束
集(S.pb (2),“启用”,“关闭”)
函数[]= pb_call2(变长度输入宗量)
S = guidata (gcbf);
集(S.pb (2),“用户数据”,1)

答案(1)

巴特Boesman
巴特Boesman 2012年12月14日
感谢这个例子!这确实有效。我想努力抓住因为使用一个迭代需要很长时间(由于一组的积分计算),这样计算随时可能被打断。现在只有打破循环的迭代计算后很忙(根据我把break语句…)。但是好吧,这是一个优雅的解决方案,谢谢!

类别

找到更多的在交互控制和回调帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!