Delete uiprogress object at the end of startup function
5 views (last 30 days)
Show older comments
Bereketab Gulai
on 14 Apr 2020
Commented: Bereketab Gulai
on 16 Apr 2020
Hello,
It seems that MATLAB is not deleting the uiprogress object variable when startup function in App Designer apps ends execution.
- Does it behave differently for some local variables? I do now delete or close (pBar), but why bother when it is local variable?
function startupFcn(app)
pBar = Utility.showIndeterminateBar(app.UIFigure);
%.....
end
%... Still runs....
UPDATE 1
I tested a separate app, and it the correct behaviour operated but not with actual. Though I have tested it with above code, removed the Utility function so that you can test...though there is nothing...
UPDATE 2
Tested with onCleanup, the result is the same...I can conclude that this has to do with MATLAB not clearing the startupFcn on time/immediately...The question would be; is there anything that can be done to prevent this?
function onCleanUpTask = showIndeterminateBar(uifigObj)
uiprogbar = uiprogressdlg(uifigObj,'Title','Please Wait...',"Indeterminate","on");
onCleanUpTask = onCleanup(@()delete(uiprogbar));
end
For your full knowledge I do have:
app.onCleanupArray{1} = onCleanup(@()cleanUpTasks(ParamNumberIn));
ParamNumberIn is a param variable local to startupFcn which will be deleted when the UIFigure is deleted. Which maybe the cause that MATLAB is saving the WORKSPACE for that function because this referenced local variable?
6 Comments
Adam Danz
on 14 Apr 2020
Edited: Adam Danz
on 14 Apr 2020
I assumed that the progress bar you're describing is produced in Utility.showIndeterminateBar (based on the variable name and that it's called from the startupFcn) but I don't know what that function is.
AppDesigner doesn't show a progress bar when opening the app unless you've programmed one, so the source of the progress bar is unclear.
When opening the app for editing, a progress bar is shown (example below). Is this was you're referring to?
Accepted Answer
Adam Danz
on 14 Apr 2020
The uiprogressdlg outputs a handle to the progress bar. To delete the bar,
d = uiprogressdlg(h);
delete(d)
to reset it to 0,
d.Value = 0;
If it works when you use the uiprogressbar directly but it doesn't work when you use your wrapper function, my guess is that you're not providing the correct handle to the uiprogressbar in the output.
When you try to delete it, is there an error?
If the problem persists, please provide the entire wrapper function so we can see what's going on and share any error messages in their entirety.
3 Comments
Adam Danz
on 15 Apr 2020
Why not just run uiprogressdlg independently? Why wrap it in another function?
I suggest the following:
1) Set the uiprogbar handle as a private property of your app. To do so, follow step #2 described here.
2) In your startup function, call uiprogressdlg directly. The handle to the progress bar will be stored in the app variable and will be accessible from anywhere within the app where the app variable is accessed.
app.uiprogbar = uiprogressdlg(uifigObj,'Title','Please Wait...',"Indeterminate","on");
3) whenever you want to delete the progress bar,
delete(app.uiprogbar)
More Answers (0)
See Also
Categories
Find more on Develop Apps Using App Designer in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!