从 C# 调用 Octave 命令的问题
Problem with Invoking Octave commands from c#
我正在尝试使用 Octave 的冲浪功能从我的 C# 应用程序中绘制 3d 数据。
我使用 Process.Start() 启动 Octave,使用 Process.WriteLine() 发送命令
同样的方法可以很好地使用 gnuplot 进行绘图,但不适用于 Octave
Process octavePro;
StreamWriter octaveStWr;
string octavepath = @"C:\Octave\Octave-5.1.0.0\mingw64\bin\octave-cli-5.1.0.exe";
private void button1_Click(object sender, EventArgs e)
{
octavePro = new Process();
octavePro.StartInfo.FileName = octavepath;
octavePro.StartInfo.UseShellExecute = false;
octavePro.StartInfo.RedirectStandardInput = true;
octavePro.StartInfo.RedirectStandardOutput = true;
octavePro.StartInfo.RedirectStandardError = true;
octavePro.StartInfo.CreateNoWindow = false;
octavePro.OutputDataReceived += new DataReceivedEventHandler(InterProcOutputHandler);
octavePro.ErrorDataReceived += new DataReceivedEventHandler(InterProcOutputHandler);
octavePro.Start();
octaveStWr = octavePro.StandardInput;
Thread.Sleep(100);
octaveStWr.WriteLine("info");
octaveStWr.WriteLine("surf([1 2 3; 2 3 4; 3 4 5])");
octaveStWr.Flush();
}
当我在 Octave-CLI 中执行两个命令 "info" 和 "surf([1 2 3; 2 3 4; 3 4 5])" 时,我分别获得应用程序信息和数据的 3d 图。
但是当我尝试从 C# 应用程序执行它时,只启动了一个终端 window 并且 window.
中没有显示任何内容
您可能需要增加睡眠时间来初始化Octave。根据每个命令的持续时间,您可能需要添加更多睡眠。同样使用waitfor
暂停Octave的执行,直到图形关闭。
octavePro.Start();
octaveStWr = octavePro.StandardInput;
octavePro.BeginOutputReadLine();
octavePro.BeginErrorReadLine();
Thread.Sleep(5000);
octaveStWr.WriteLine("info");
Thread.Sleep(1000);
octaveStWr.WriteLine("waitfor(surf([1 2 3; 2 3 4; 3 4 5]))");
我正在尝试使用 Octave 的冲浪功能从我的 C# 应用程序中绘制 3d 数据。
我使用 Process.Start() 启动 Octave,使用 Process.WriteLine() 发送命令 同样的方法可以很好地使用 gnuplot 进行绘图,但不适用于 Octave
Process octavePro;
StreamWriter octaveStWr;
string octavepath = @"C:\Octave\Octave-5.1.0.0\mingw64\bin\octave-cli-5.1.0.exe";
private void button1_Click(object sender, EventArgs e)
{
octavePro = new Process();
octavePro.StartInfo.FileName = octavepath;
octavePro.StartInfo.UseShellExecute = false;
octavePro.StartInfo.RedirectStandardInput = true;
octavePro.StartInfo.RedirectStandardOutput = true;
octavePro.StartInfo.RedirectStandardError = true;
octavePro.StartInfo.CreateNoWindow = false;
octavePro.OutputDataReceived += new DataReceivedEventHandler(InterProcOutputHandler);
octavePro.ErrorDataReceived += new DataReceivedEventHandler(InterProcOutputHandler);
octavePro.Start();
octaveStWr = octavePro.StandardInput;
Thread.Sleep(100);
octaveStWr.WriteLine("info");
octaveStWr.WriteLine("surf([1 2 3; 2 3 4; 3 4 5])");
octaveStWr.Flush();
}
当我在 Octave-CLI 中执行两个命令 "info" 和 "surf([1 2 3; 2 3 4; 3 4 5])" 时,我分别获得应用程序信息和数据的 3d 图。 但是当我尝试从 C# 应用程序执行它时,只启动了一个终端 window 并且 window.
中没有显示任何内容您可能需要增加睡眠时间来初始化Octave。根据每个命令的持续时间,您可能需要添加更多睡眠。同样使用waitfor
暂停Octave的执行,直到图形关闭。
octavePro.Start();
octaveStWr = octavePro.StandardInput;
octavePro.BeginOutputReadLine();
octavePro.BeginErrorReadLine();
Thread.Sleep(5000);
octaveStWr.WriteLine("info");
Thread.Sleep(1000);
octaveStWr.WriteLine("waitfor(surf([1 2 3; 2 3 4; 3 4 5]))");