从C#运行Matlab GUI

时间:2014-12-07 11:12:28

标签: c# matlab user-interface integration

在我的项目中,我正在将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文件变为空,数据未加载到数据网格中。

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

1 个答案:

答案 0 :(得分:1)

在我的解决方案中,您应该在启动代码之前进行一些设置,以便在C#应用程序中使用Matlab实例。

添加必要的dll:  首先,我们将使用COM接口添加dll引用。单击项目上的RMB,然后选择[添加引用]选项。在新窗口中单击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#程序处理这些数据。你应该注意你可以调用你的GUI在Matlab中只是将你的程序名称写成command.Suppose你有一个名为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();

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