MathWorks.MATLAB.Runtime.MATLABRuntime
.NET class that represents a MATLAB Runtime instance
Since R2022b
Description
The MATLABRuntime
class represents a MATLAB® Runtime instance. You can call MATLAB functions as methods of a MATLABRuntime
object using dot
notation because the functions are dynamically invoked when you call them.
Assemblies
C:\Program Files\MATLAB\R2024b\extern\dotnet\netstandard2.0\MathWorks.MATLAB.Runtime.dll
C:\Program Files\MATLAB\R2024b\extern\dotnet\netstandard2.0\MathWorks.MATLAB.Types.dll
Class Details
Namespace: | MathWorks.MATLAB.Runtime |
Superclass: | System.Dynamic.DynamicObject |
Interface: | System.IDisposable |
Method Summary
Static Methods
StartMATLAB | Start MATLAB Runtime instance synchronously |
StartMATLABAsync | Start MATLAB Runtime instance asynchronously |
TerminateApplication | Terminate MATLAB application |
SetupMacRunLoopAndRun | Set up Core Foundation |
Instance Methods
WaitForFiguresToClose | Pause until all figures in an assembly have been closed |
Dispose | Terminate MATLAB Runtime instance explicitly |
Method Details
StartMATLAB
static MATLABRuntime StartMATLAB(string ctfArchiveName);
Start MATLAB Runtime instance synchronously
and connects to it. If you want to launch a MATLAB Runtime instance in a separate process, set the
OutOfProcessAttribute
to true
.
| Name of deployable archive ( |
Instance of MATLABRuntime
.
| MATLAB fails to start. |
System.ArgumentNullException | Null string is not a valid argument. |
Start a new MATLAB Runtime instance with a deployable archive (.ctf
file).
using System; using MathWorks.MATLAB.Runtime; using MathWorks.MATLAB.Types; namespace MyConsoleApp { class Program { static void Main(string[] args) { string ctfPath = @"P:\MATLAB\work\mylinspace.ctf "; using (dynamic matlab = MATLABRuntime.StartMATLAB(ctfPath)) { double[] vec = matlab.mylinspace(1.0, 100.0); foreach (double i in vec) { Console.Write("{0} ", i); } } Console.ReadLine(); } } }
StartMATLABAsync
static Task<MATLABRuntime> StartMATLABAsync(string
ctfArchiveName);
static Task<MATLABRuntime> StartMATLABAsync(string ctfArchiveName,
System.Threading.CancellationToken token);
Start a MATLAB Runtime instance asynchronously in a separate process and connect to it.
|
Name of deployable archive ( |
CancellationToken token | Cancellation token used to cancel asynchronous tasks. The default is
|
Task that completes when the MATLABRuntime
instance is instantiated or
an exception occurs.
|
MATLAB fails to start. |
System.ArgumentNullException | Null string is not a valid argument. |
Start two MATLAB Runtime instances asynchronously.
using System; using MathWorks.MATLAB.Runtime; using MathWorks.MATLAB.Types; // Set OutOfProcessAttribute to true // This ensures each MATLAB Runtime instance runs in a separate process, allowing for true parallel execution [assembly: OutOfProcess(true)] namespace MyConsoleApp { class Program { // Asynchronously calls a MATLAB function when the MATLAB Runtime instance is ready static async void CallDisp(Task<MATLABRuntime> matlabTask) { try { // Await the completion of the MATLAB Runtime startup dynamic matlab = await matlabTask; // Use the MATLAB instance within a using statement to ensure proper disposal using (matlab) { // Call a MATLAB function with specified arguments matlab.mydisp(new RunOptions(nargout: 0), "Hello, Call MATLAB!"); } } catch (Exception ex) { // Handle any exceptions that occur during the MATLAB function call Console.WriteLine($"Error in MATLAB call: {ex.Message}"); throw; } } static void Main(string[] args) { try { // Start two MATLAB Runtime instances asynchronously // Each instance will execute the CallDisp method upon startup completion Task workflowTask1 = MATLABRuntime.StartMATLABAsync("mydisp.ctf").ContinueWith(CallDisp); Task workflowTask2 = MATLABRuntime.StartMATLABAsync("mydisp.ctf").ContinueWith(CallDisp); // Wait for both MATLAB Runtime instances to complete their tasks // This ensures that the main thread does not proceed until both instances are done Task.WhenAll(workflowTask1, workflowTask2).Wait(); Console.WriteLine("Done!"); } catch (AggregateException ae) { // Handle exceptions that are thrown from within the tasks // Rethrow the inner exception for further handling or logging throw ae.InnerException; } } } }
Start a MATLAB Runtime instance asynchronously, but cancel if the operation takes more than 10 seconds.
using System; using System.Threading; using System.Threading.Tasks; using MathWorks.MATLAB.Runtime; using MathWorks.MATLAB.Types; class Program { static async Task CallMATLAB(Task<MATLABRuntime> matlabTask) { try { // Await the MATLAB Runtime task to complete and get the MATLAB instance using (dynamic matlab = await matlabTask) { // Call a MATLAB function using the MATLAB instance matlab.mydisp(new RunOptions(nargout: 0), "Hello, CallMATLAB!"); } } catch (OperationCanceledException) { Console.WriteLine("MATLAB call was cancelled."); throw; // Re-throwing to be caught in the calling method } } static async Task Main(string[] args) { // Create a CancellationTokenSource to control task cancellation using (CancellationTokenSource src = new CancellationTokenSource()) { // Schedule the cancellation after 10 seconds src.CancelAfter(TimeSpan.FromSeconds(10)); try { // Start the MATLAB Runtime asynchronously with cancellation token Task workflowTask = MATLABRuntime.StartMATLABAsync("mydisp.ctf", src.Token) .ContinueWith(CallMATLAB, src.Token); // Await the completion of the MATLAB Runtime task // This is a non-blocking wait and will throw an exception if cancelled await workflowTask; Console.WriteLine("Task completed successfully!"); } catch (OperationCanceledException) { // Handle the cancellation of the task Console.Error.WriteLine("Task was cancelled before completion."); } catch (Exception ex) { // Handle any other exceptions that might occur Console.Error.WriteLine($"An error occurred: {ex.Message}"); throw; // Optional: rethrow if you want to escalate the error } } } }
TerminateApplication
static void TerminateApplication();
Terminate the MATLAB application and tear-down MATLAB Runtime instances.
using System; using MathWorks.MATLAB.Runtime; using MathWorks.MATLAB.Types; namespace MyConsoleApp { class Program { static void Main(string[] args) { string ctfPath = @"P:\MATLAB\work\mylinspace.ctf "; dynamic matlab = MATLABRuntime.StartMATLAB(ctfPath); double[] dbls = matlab.mylinspace(1.0, 100.0); foreach (double i in dbls) { Console.Write("{0} ", i); } Console.ReadLine(); MATLABRuntime.TerminateApplication(); } } }
SetupMacRunLoopAndRun
static void SetupMacRunLoopAndRun(Func<Object, int> userFunc, Object
args);
Set up Core Foundation CFRunLoop
for an application running on
macOS. Use this method if Nojvm
or
OutOfProcess
attribute is not specified.
| User specified function or method that runs MATLAB code with |
Object args | Arguments passed to the user specified function or method. |
using System; using MathWorks.MATLAB.Runtime; using MathWorks.MATLAB.Types; using MathWorks.MATLAB.Exceptions; using System.Threading.Tasks; using System.IO; using System.Threading; using System.Diagnostics; using System.Dynamic; [assembly: RuntimeOption("-softwareopenglmesa")] namespace MyConsoleApp { public class Program { static void Main(string[] args) { MATLABRuntime.SetupMacRunLoopAndRun(MainFunc, null); } static int MainFunc(Object args) { try { string ctfPath = @"P:\MATLAB\work\matlabfunccomp.ctf "; using (dynamic matlab = MATLABRuntime.StartMATLAB(ctfPath)) { matlab.myFun(new RunOptions(nargout: 0), "all"); } } catch (Exception ex) { Console.WriteLine(ex.Message + DateTime.Now.ToLongTimeString()); } Thread.Sleep(100); Console.WriteLine("Terminating Application"); MATLABRuntime.TerminateApplication(); return 0; } } }
WaitForFiguresToClose
void WaitForFiguresToClose();
Wait for all visible figures created from the MATLAB Runtime instance to close before proceeding.
using System; using MathWorks.MATLAB.Runtime; using MathWorks.MATLAB.Types; namespace MyConsoleApp { class Program { static void Main(string[] args) { string ctfPath = @"P:\MATLAB\work\myPlot.ctf "; using (dynamic matlab = MATLABRuntime.StartMATLAB(ctfPath)) { matlab.myPlot(new RunOptions(nargout: 0), 10.0); matlab.WaitForFiguresToClose(); } } } }
Dispose
void Dispose();
Terminate MATLAB Runtime instance explicitly. If not called, the MATLAB Runtime instance will be terminated by the TerminateApplication method.
| MATLAB fails to terminate. |
using System; using MathWorks.MATLAB.Runtime; using MathWorks.MATLAB.Types; namespace MyConsoleApp { class Program { static void Main(string[] args) { string ctfPath = @"P:\MATLAB\work\dotnetnew\output\mylinspace.ctf "; dynamic matlab = MATLABRuntime.StartMATLAB(ctfPath); double[] vec = matlab.mylinspace(1.0, 100.0); foreach (double i in vec) { Console.Write("{0} ", i); } matlab.Dispose(); } } }
Version History
Introduced in R2022b