Matlab waitbar - 关闭所有不起作用

时间:2011-12-06 20:12:03

标签: matlab figure

我有一些代码可以创建一个等待栏:

if long_process %user specifies this true/false
    h = waitbar(1/4, msg);
end
process(arg1,arg2);

过程是一些做一些绘图的功能。如果我在某个地方进行CTRL-C并且我得到一个数字窗口,我可以关闭所有并且数字消失。但是,等待栏仍然存在。我不知道如何通过“关闭所有”来使这件事变得紧密。

这令人烦恼的原因是因为当我开始调试时,我经常会打开20多个等待栏。 '关闭所有'然后就派上用场了。

1 个答案:

答案 0 :(得分:14)

实际上,CLOSE功能为您提供了更多“有力”选项:

close all hidden
close all force

如果由于某种原因那些不起作用,你有一个“核”选项是删除所有数字,包括隐藏句柄的数字,如CLOSEWAITBAR文档:

set(0,'ShowHiddenHandles','on');
delete(get(0,'Children'));

您可能会发现最简单的方法是创建自己的帮助函数来为您执行此操作(并将'ShowHiddenHandles'的状态返回到其默认的'off'状态),这样您就没有那么多的类型:

function killEmAll
  set(0,'ShowHiddenHandles','on');
  delete(get(0,'Children'));
  set(0,'ShowHiddenHandles','off');
end


...即使是第三个​​选项,也可以尝试使用onCleanup objects完全避免问题(如果您的代码的组织允许它)!如果您运行以下示例代码,当CTRL-C退出无限循环时,应自动删除等待栏:

function runprocess
  h = waitbar(1/4, 'la la la...');
  waitObject = onCleanup(@() delete(h));
  process();
end

function process
  i = 1;
  while (i > 0)
    i = i + 1;
  end
end