Aborting callback execution in GUI - Drawnow error
2 views (last 30 days)
I'm working on a GUI, where I have one task that is very computationally intensive. Therefore I want to add a button that enables the user to cancel the current calculation. I read a lot of posts that tackled the same problem, and therefore I implemented a try catch statement. Pressing on the cancel button creates an error in its own callback function and I try to catch this error in the other callback which contains my computation. This compution consists of a loop that runs over different frequencies, thus in the catch block, I use the break function to get out of this loop. Inside the loop I also place a few drawnow commands to be able to see when the cancel event is triggered. When pressing my cancel button during a computation, I see the error that I generate, but matlab also generates another error stating: "Error using drawnow" / "Error when evaluating uicontrol Callback". And I have entirely no idea where it comes from. Any hint is welcome ... At the time I get this message, matlab is still in the loop, meaning that the break statement is not reached yet ...?
Matt Fig on 14 Dec 2012
I am not sure why you are using errors to try to cancel an operation. It seems simpler to just have the cancel button set a flag that your operation checks. Here is a simple example of what I mean:
function  = gui_breakloop()
% How to stop a while loop with a toggle button.
S.f = figure('name','gui_breakloop',...
'pos',[100 100 300 150]);
S.pb = uicontrol('Style','toggle',...
'Position',[10 10 130 130],...
S.pb(2) = uicontrol('Style','toggle',...
'Position',[160 10 130 130],...
guidata(S.f,S); % Store the handles in GUIDATA.
function  = pb_call(varargin)
% Callback for looping button
S = guidata(gcbf);
A = sort(rand(1000));
pause(.05) % Forces graphics refresh
function  = pb_call2(varargin)
S = guidata(gcbf);