我们可以在C#中创建GUI来运行MATLAB代码吗?
我在MATLAB中设计了代码并且工作正常。 我在MATLAB中使用GUI,但这对我来说很头疼。 我想我可以简单有效地创建GUI。 我们可以在C#中创建GUI,它还将运行我设计的MATLAB的整个代码吗?
是的,这是可能的。 有关详细信息,请查看:
- 从C#调用MATLAB函数
- 将MATLAB与C#集成
- MATLAB编译器
如果你需要一个快速而肮脏的方法用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编译器运行时 – 如果他没有安装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变得毫无用处。
此链接非常有用和简单: 从C#Client调用MATLAB函数