我已经在 MATLAB 中设计了代码,并且运行良好。我在 MATLAB 中使用 GUI 工作,但这对我来说很头疼。我认为我可以简单有效地创建 GUI。我们可以在 C# 中创建 GUI 来运行我设计的整个 MATLAB 代码吗?
3 回答
是的,这是可能的。有关详细信息,请查看:
如果您需要一种快速而肮脏的方法来使用 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。现在,您可以从 C# 应用程序将这个 exe 作为进程启动,例如单击按钮:
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 文件)。
我对 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 引入的相当大的开销。比方说,您希望在每次单击其他按钮时花费不到一秒钟的时间进行快速矩阵计算操作,而不是每次都启动一个standalone.exe 会使您的 gui 变得毫无用处。
这个链接非常有用和简单: Call MATLAB Function from C# Client