从c#

时间:2019-04-23 14:26:37

标签: c# octave

我正在尝试使用Octave的surf函数从c#应用程序中绘制3d数据。

我使用Process.Start()启动八度,并使用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#应用程序执行它时,仅启动了一个终端窗口,而该窗口中没有任何显示。

1 个答案:

答案 0 :(得分:0)

您可能需要增加睡眠时间来初始化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]))");