Abort external code process called by Matlab

2 Ansichten (letzte 30 Tage)
Yonatan Nethanel
Yonatan Nethanel am 7 Jan. 2020
Kommentiert: Guillaume am 3 Feb. 2020
Hi!
I have a c# function called by matlab, which takes long time to process. Also, I need the ability to raise a c# flag (used for aborting the process) from a UI .
So I need to do something like the follow:
%%
% on main file:
% launching the ui with the abort button
UI_guide();
% calling the long c# function
long_c_sharp_function();
%%
% on the guide .m file:
function button_pressed_callback()
c_sharp_function_to_raise_flag();
end
The problem is, the "abort" button callback is executed only after the long function finished - which mean I can't abort the process.
what can i do to solve this problem? should i consider another method?

Antworten (1)

Andrew Janke
Andrew Janke am 31 Jan. 2020
There's no general mechanism for aborting a C# function call. The C# function has to be written specifically to support aborting, and you'll need to call it on a separate worker thread to allow your main thread to do the timeout and then call the abort.
  3 Kommentare
Andrew Janke
Andrew Janke am 3 Feb. 2020
Ah. In that case, you need to run your C# code on another thread. Run your C# code using the C# Task mechanism - https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/task-based-asynchronous-programming - and that will leave the Matlab execution thread free for your GUI callbacks to happen on.
Guillaume
Guillaume am 3 Feb. 2020
I'm confused by the question, " I need the ability to raise a c# flag (used for aborting the process) from a UI" really sounds like you want matlab to be the one that send the abort signal to a long running C# code. In that case, as Andrew wrote there is no mechanism for that. Matlab is single threaded and if it has handed control to C#, there's nothing it can do in the meantime.
However, indeed if your C# code spawn a new thread doing the actual processing and returns immediately (using tasks for example), then yes matlab can then continue to do processing and then sets a flag. All the async logical needs to be implemented on the C# side, matlab can't help you with it.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by