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