【问题标题】:Can we create GUI in C# that will run the MATLAB code in back hand?我们可以在 C# 中创建 GUI 以反手运行 MATLAB 代码吗?
【发布时间】:2013-09-14 15:02:40
【问题描述】:

我已经在 MATLAB 中设计了代码,并且运行良好。我在 MATLAB 中使用 GUI 工作,但这对我来说很头疼。我认为我可以简单有效地创建 GUI。我们可以在 C# 中创建 GUI,同时运行我设计的整个 MATLAB 代码吗?

【问题讨论】:

  • 如果你的GUI比较简单,另一种方法是在Matlab中调用一个.NET模态对话框,根据用户在对话框中的选择,你可以运行一个特定的Matlab脚本。这种方法的一个优点是您根本不必离开 Matlab。

标签: c# matlab user-interface matlab-deployment


【解决方案1】:

是的,这是可能的。详情请看:

如果您需要一种使用 C# GUI(例如 WinForms)包装 MATLAB 代码的快速而肮脏的方法,一个选择是从您的 MATLAB 代码 (.m) 创建一个 exe - 从 .NET,然后您可以轻松地启动它exe作为一个新进程。请注意,这种方法在某些情况下可能不是最好的,因为 exe 调用引入的延迟可能相当大(正如其他答案所解释的那样)。

一个例子:首先,把MATLAB代码写成一个函数:

function y=SamplePlot(p, d, w, t)
numericValueP=str2num(p);
numericValueD=str2num(d);
numericValueW=str2num(w);
time=str2num(t);

%... do stuff ...
plot(...);

输入参数将通过命令行作为字符串参数传递给此代码,因此它们通过str2num 进行转换。例如。 MATLAB 调用

SamplePlot('1', '2', '3', '4')

将表示为

SamplePlot.exe 1 2 3 4

现在,从 .m 文件创建一个独立的控制台应用程序:在 MATLAB 控制台中,编写:

deploytool

名称:SamplePlot.prj(例如)。目标:控制台应用程序。 添加 .m 文件。 包:添加 MCR(这是 MATLAB Compiler Runtime - 这是最终用户在没有安装 MATLAB 时需要的;对于本地测试,您不需要添加它)。 然后使用:

mbuild -setup

最后,点击“构建”图标。一段时间后,会生成一个exe。现在,您可以将此 exe 作为 C# 应用程序的进程启动,例如点击按钮:

private void button1_Click(object sender, EventArgs e)
{
      string p=TextBox1.Text;
      string d=TextBox2.Text;
      string w=TextBox3.Text;
      string t=TextBox4.Text;
      string params = String.Format("{0} {1} {2} {3}",p,d,w,t);
      System.Diagnostics.Process.Start("SamplePlot.exe", params);
}

我遗漏了一些小细节,但这是一种可能的选择。

(如果我没记错的话,也可以通过这种方式生成程序集;然后您可以调用程序集而不是 exe 文件)。

【讨论】:

  • MATLAB 有一个基于 MATLAB 编译器构建的产品 (MATLAB Builder NE),专门用于生成 .NET 程序集:mathworks.com/products/netbuilder。无需弄乱 EXE 文件,您可以将生成的程序集用作任何其他 .NET 库。结果当然取决于MCR
【解决方案2】:

我对 C# 很陌生,但最终碰巧使用了 MATLAB 中的 .NET 类。

所以,你也可以反过来做,而不是之前的答案建议:

由于 MATLAB 能够创建/打开 .NET gui 元素(如对话框),我想您也应该能够从 MATLAB 打开您的 .NET-GUI,然后通过回调插入您的 MATLAB 代码。 参见例如: http://www.mathworks.de/de/help/matlab/matlab_external/getting-started-with-net.html

根据您希望从 gui 执行 matlab 代码的频率以及 matlab 处理时间通常有多长,这也避免了相当大的开销,例如通过使用 MATLAB 编译器生成的 .exe 引入。 比如说,您希望在每次单击其他按钮时花费不到一秒钟的时间进行快速矩阵计算操作,而不是每次都启动一个独立的.exe 会使您的 gui 变得毫无用处。

【讨论】:

    【解决方案3】:

    此链接非常有用且简单: Call MATLAB Function from C# Client

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多