我们可以在 C# 中创建 GUI 来反手运行 MATLAB 代码吗?
本文关键字:运行 MATLAB 代码 GUI 创建 我们 | 更新日期: 2023-09-27 18:30:47
我已经在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引入的开销。比如说,你想在每次按钮点击时用不到一秒钟的时间进行快速矩阵计算操作,而不是每次启动一个独立的操作.exe都会让你的 gui 变得毫无用处。
这个链接非常有用和简单:从 C# 客户端调用 MATLAB 函数