C# 从C语言运行matlabgui#

C# 从C语言运行matlabgui#,c#,matlab,user-interface,integration,C#,Matlab,User Interface,Integration,在我的项目中,我将MatlabGUI应用程序与C#应用程序集成 我考虑的解决方案是从MatlabGUI创建一个独立的应用程序,并通过C#中的一个按钮启动它: 问题是,在关闭MatlabGUI的启动屏幕之后,在实际程序打开之前,C#检测到程序已经关闭,并继续到下一行 此外,接下来的几行代码没有正确执行: List<String> Movement = new List<String>(); List<String> Repetition = ne

在我的项目中,我将MatlabGUI应用程序与C#应用程序集成

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

问题是,在关闭MatlabGUI的启动屏幕之后,在实际程序打开之前,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]);
        }   
列表移动=新列表();
列表重复=新列表();
列表持续时间=新列表();
使用(CsvFileReader=newCSVFileReader(“capture.csv”))
{
CsvRow行=新CsvRow();
while(reader.ReadRow(row))
{
移动。添加(第[0]行);
重复。添加(第[1]行);
持续时间。添加(第[2]行);
}
}
for(int i=1;i
发生的情况是,在C#错误地检测到流程关闭后,capture.csv文件变为空,数据没有加载到数据网格中


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

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

添加必要的dll: 首先,我们将添加带有COM接口的dll引用。单击项目上的RMB并选择[添加参考]选项。在新窗口中,单击COM选项卡。在搜索文本框中写下“Matlab”。然后选择“Matlab应用程序(7.10版)类型库”

您应该获得如下参考:

现在,您可以轻松地使用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。您可以通过以下方式调用该GUI:在命令行中调用myGui,因为您可以写1+2得到3

让我们调用gui

matlab.Execute("myGui"); // This will execute your Gui. You can use buttons to save data to CSV file
  matlab.Quit();
我在此页面上扩展了示例:

谢谢您完整的回答。对我来说,只调用MatlabGUI要容易得多,因为它是一个复杂的GUI,需要花费大量的精力来转换所有的图形。但是,问题是在我将my GUI文件(.m.fig)放入调试文件夹并按您提到的方式运行后,matlab将在任务栏(无窗口)中打开,几秒钟后关闭。您不需要将任何matlab文件放入调试文件夹。所有这些文件都应位于matlab当前文件夹中。如果它不工作,可能您的gui m文件不在Matlabs当前文件夹中。
matlab.Execute("myGui"); // This will execute your Gui. You can use buttons to save data to CSV file
  matlab.Quit();