2

我有一些创建等待栏的代码:

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

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

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

4

1 回答 1

15

实际上,该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对象完全避免问题(如果您的代码组织允许) !如果您运行以下示例代码,当您退出无限循环时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
于 2011-12-06T20:25:26.640 回答