How to monitor background queue of App Designer `uifigure` (e.g. its initialisation), which can be waited with `drawnow`?

5 次查看(过去 30 天)
Hi,
It appears the background queue of a uifigure finishes much later than its appearance. For example:
profile on
f=uifigure('Visible','on','WindowState',"maximized");
a1=uiaxes(f); % use `uiaxes` to make it much slower
% drawnow
f.Position
delete(f);
profile off
profile viewer
will have different f.Position output as well as profile "total time" with/without the drawnow. This asynchronous behaviour allows some early input from the user before all background tasks finsih, I guess.
I wonder what is the method to get the "queue state" of a uifigure? As it can be walled by drawnow, I assume this is possible?
My ultimate goals are, for example, to have a uilamp to indicate the busy/idle of background queues from operations like "moving a ROI on a uiaxes", as well as knowing the end of the initialisation without using drawnow to wait.
Cheers

回答(1 个)

Suraj Kumar
Suraj Kumar 2024-3-26
Hi Tianyu,
MATLAB does not offer a direct built-in function to inquire about the "queue state" of a “uifigure”, but as a workaround you can attach event listeners to specific events “MovingROI”, “ROIMoved” that can serve as markers for the start and end of significant operations.
You can refer the below code snippet which features a “uilamp” function that changes colour from green (idle) to red (busy) based on the ROI's movement, using event listeners to track the start and completion of this interaction:
f = uifigure('Position', [100, 100, 400, 400]);
a1 = uiaxes(f, 'Position', [100, 100, 200, 200]);
roi = drawrectangle(a1);
uil = uilamp(f, 'Position', [20, 20, 20, 20], 'Color', 'green'); % Start as 'idle'
% Listener for starting the move
addlistener(roi, 'MovingROI', @(src, evt) set(uil, 'Color', 'red')); % Busy
% Listener for move completion
addlistener(roi, 'ROIMoved', @(src, evt) set(uil, 'Color', 'green')); % Idle
You can refer the figures shown below:
To know more about “uilamp function and event listeners, please refer to the documentations below:
  1. https://www.mathworks.com/help/matlab/ref/uilamp.html
  2. https://www.mathworks.com/help/matlab/matlab_oop/learning-to-use-events-and-listeners.html#bu6lzcw
Hope this helps!

类别

Help CenterFile Exchange 中查找有关 App Building 的更多信息

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by