Matlab AppDesigner回调报错时无需try-catch关闭uiprogressdlg方法咨询
Matlab AppDesigner uiprogressdlg报错后无需重启关闭方案
方案1:命令行全局搜索销毁(调试场景首选,无需修改现有代码)
直接在MATLAB命令行执行以下命令即可关闭所有未正常关闭的uiprogressdlg弹窗:
delete(findall(groot, 'Type', 'uiprogressdlg'))
原理是从MATLAB根对象groot下遍历所有类型为uiprogressdlg的实例,直接批量销毁,不需要获取app句柄,也不需要提前做任何配置。
方案2:通过主窗口获取app实例销毁
如果需要指定关闭当前app的进度弹窗,可以通过主窗口的内置属性获取app实例:
% 把<你的主窗口标题>替换为你app.GUIname对应的窗口标题 main_fig = findall(groot, 'Type', 'uifigure', 'Name', '你的主窗口标题'); app = main_fig.RunningAppInstance; delete(app.PB);
该方法解决了evalin('base','app')拿不到app实例的问题:AppDesigner生成的uifigure自带RunningAppInstance属性,直接指向运行中的app对象,不需要依赖base工作区的变量。
方案3:给uiprogressdlg绑定自身的按键销毁回调(面向用户场景首选)
之前绑定主窗口回调不生效的原因是uiprogressdlg为模态窗口,弹出时会拦截所有输入事件到自身,主窗口的回调不会被触发。你可以在创建uiprogressdlg的时候直接给实例自身绑定回调:
app.PB = uiprogressdlg(app.GUIname, ... 'Title', '处理中', ... 'Message', '请稍候', ... 'KeyPressFcn', @(dlg, event) delete(dlg));
配置后只要uiprogressdlg处于焦点状态,按下任意键就会直接关闭该弹窗,不需要修改其他业务代码,也不需要操作命令行。
内容的提问来源于stack exchange,提问作者iijoexx
相关产品推荐
相关产品推荐

