从 C# 运行 Matlab GUI

问题描述 投票:0回答:1
在我的项目中,我将 Matlab GUI 应用程序与 C# 应用程序集成。

我想到的解决方案是从 Matlab GUI 创建一个独立的应用程序,并通过 C# 中的按钮启动它:

Process exeProcess = Process.Start("Data_Capture_Direct_call.exe"); if(!exeProcess.HasExited) { exeProcess.WaitForExit(); } exeProcess.Close();

问题在于,Matlab GUI 的启动屏幕关闭后、实际程序打开之前,C# 检测到程序已关闭并继续执行下一行。

另外,接下来的几行代码没有正确执行:

List<String> Movement = new List<String>(); List<String> Repetition = new List<String>(); List<String> Duration = new List<String>(); using (CsvFileReader reader = new CsvFileReader("capture.csv")) { CsvRow row = new CsvRow(); while (reader.ReadRow(row)) { Movement.Add(row[0]); Repetition.Add(row[1]); Duration.Add(row[2]); } } for (int i = 1; i < Movement.Count; i++) { dataGridView1.Rows.Add(i, Movement[i], Repetition[i], Duration[i]); }

发生的情况是,C# 错误地检测到进程关闭后,capture.csv 文件变空,并且数据未加载到数据网格中。

请让我知道我在哪里犯了错误,或者是否有更好的方法来做到这一点!

c# matlab user-interface
1个回答
1
投票
在我的解决方案中,您应该在开始代码之前进行一些设置,以便在 C# 应用程序中使用 Matlab 实例。

添加必要的dll: 首先我们将使用 COM 接口添加 dll 引用。单击项目上的人民币并选择[添加引用]选项。在新窗口中单击“COM”选项卡。在搜索文本框中输入“Matlab”。然后选择“Matlab Application (Version 7.10) Type Library”。

您应该获得如下参考:

enter image description here

现在您可以轻松地用 C# 完成在 Matlab 上能做的任何事情。让我们举一个基本的例子:

var acCtx = Type.GetTypeFromProgID("matlab.application.single"); var matlab = (MLApp.MLApp)Activator.CreateInstance(acCtx);

这两行是在代码中创建matlab实例。现在让我们在Matlab上进行简单的计算。

Console.WriteLine(matlab.Execute("1+2")); // This will output 3 on console. matlab.Quit(); // you should close matlab in order to clean memory

让我们解决您的实际问题。您想要执行一个 Matlab GUI 程序。我认为您的 Gui 正在将一些数据记录到 CSV 文件中。然后您的 C# 程序处理该数据。您应该注意,您可以在 Matlab 中调用 GUI只需将程序名称写为命令即可。假设您有一个名为 myGui.m 的 GUI。您可以通过在命令行中调用 myGui 来调用该 gui,因为您可以编写 1+2 得到 3。

我们打电话给gui吧。

matlab.Execute("myGui"); // This will execute your Gui. You can use buttons to save data to CSV file matlab.Quit();

我在此页面上扩展了示例:

来源

© www.soinside.com 2019 - 2024. All rights reserved.