Borrar filtros
Borrar filtros

Property with set observable attribute interrupts a current running callback when triggered

8 visualizaciones (últimos 30 días)
I have a drop down callback, which is actioned when the user selects one of the many options. Then this callback is triggered, but along the callback there is a code line where an app.property is assigned a new value, this property has as one of its attributes, the Set observable activated, then the code interrupts the first callback and move to run the listener callback of this app.property. Once this second callback (the listener callback) is finished, Matlab comes back to the earlier callback. But the thing is that I don't want this to happen, cause the listener callbacks needs something from the first callback which is placed below the line of the property with the Setobservable atribute.
I have set, for the drop down callback, the "Interruptible property" to "off", and the "Busyactions property" to "cancel" as the Matlab documentation suggest (Matlab app designer pdf - page 11-15), but nothing happens.
Any idea what to do with this? I have googled this issue before to look for a similar one and nothing, that is why I rise this question.

Respuestas (1)

Abhishek Chakram
Abhishek Chakram el 23 de Abr. de 2024
Hi LEMF,
The behaviour you are experiencing is due to the “SetObservable” property triggering its listener callback immediately upon assignment, which can indeed interrupt the flow of the initial callback function. To overcome this, you can set the “BusyAction” property to “queue” as this tells MATLAB to execute the interrupting callback after the running callback finishes. The “Interruptible” property will be set to “off”.
Alternatively, you can also defer the execution of the property change that triggers the listener by using a timer or by scheduling the change to occur after the current callback finishes its critical section. Here is a simple example using a timer:
% Inside your dropdown callback
function dropdownCallback(app, event)
% Your initial callback code here
% Defer the property assignment
t = timer;
t.StartDelay = 0.01; % Delay in seconds, adjust as needed
t.TimerFcn = @(~,~) setProperty(app);
start(t);
end
% Separate function to change the property
function setProperty(app)
app.YourObservableProperty = newValue; % YourObservableProperty is your property
end
You can refer to the following documentation to know more about functions used:
Best Regards,
Abhishek Chakram

Categorías

Más información sobre App Building en Help Center y File Exchange.

Productos


Versión

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by