【问题标题】:Running Matlab GUI from C#从 C# 运行 Matlab GUI
【发布时间】:2014-12-08 00:13:34
【问题描述】:

在我的项目中,我将 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 integration


    【解决方案1】:

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

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

    你应该得到如下参考:

    现在您可以在 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 中,只需将您的程序名称写为命令。假设您有一个名为 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

    【讨论】:

    • 感谢您的完整回答。只调用我的 Matlab GUI 对我来说要容易得多,因为它是一个复杂的 GUI,并且需要花费大量精力来转换所有内容。但是,问题是在我将我的 GUI 文件 (.m .fig ) 放在调试文件夹中并按照您提到的那样运行之后,matlab 将在任务栏(无窗口)中打开并在几秒钟后关闭。
    • 您不需要将任何 matlab 文件放入您的调试文件夹。所有这些文件都应该在 Matlab 当前文件夹中。如果它不起作用,可能你的 gui 的 m 文件不在 Matlabs 当前文件夹中。
    猜你喜欢
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多