Проблема с вызовом команд Octave из c # - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь использовать функцию прибоя Octave для построения трехмерных данных из моего приложения на c #.

Я использую 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();
        }

Когда я выполняю две команды «info» и «surf» ([1 2 3; 2 3 4; 3 4 5]) »в Octave-CLI, я получаю информацию о приложении и трехмерный график для данных соответственно. Но когда я пытаюсь выполнить его из приложения C #, запускается только окно терминала, и в нем ничего не отображается.

1 Ответ

0 голосов
/ 23 апреля 2019

Возможно, вам потребуется увеличить время сна для инициализации Octave.В зависимости от продолжительности каждой команды вам может понадобиться добавить больше снов.Также используйте waitfor, чтобы приостановить выполнение Октавы, пока фигура не закроется.

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]))");
...