Повторяющаяся подача ввода в стандартный ввод процесса

У меня есть консольное приложение (C #), которое поддерживает состояние. Состояние может быть изменено путем подачи в приложение различных входных данных через консоль. Мне нужно иметь возможность как скормить приложению небольшой ввод, затем прочитать вывод, промыть и повторить.

Я создаю новый процесс и выполняю всю обычную работу по перенаправлению ввода / вывода. Проблема в том, что после того, как я отправил ввод и вызвал ReadLine () на стандартный вывод, он не возвращает значение до того, как я вызову Close () на стандартном вводе, после чего я не может больше писать во входной поток.

Как я могу сохранить входной поток открытым, продолжая получать выходные данные?

 var process = new Process
                          {
                              StartInfo =
                                  {
                                      FileName =
                                          @"blabal.exe",
                                      RedirectStandardInput = true,
                                      RedirectStandardError = true,
                                      RedirectStandardOutput = true,
                                      UseShellExecute = false,
                                      CreateNoWindow = true,
                                      ErrorDialog = false
                                  }
                          };


        process.EnableRaisingEvents = false;

        process.Start();

        var standardInput = process.StandardInput;
        standardInput.AutoFlush = true;
        var standardOutput = process.StandardOutput;
        var standardError = process.StandardError;

        standardInput.Write("ready");
        standardInput.Close(); // <-- output doesn't arrive before after this line
        var outputData = standardOutput.ReadLine();

        process.Close();
        process.Dispose();

Консольное приложение, из которого я перенаправляю ввод-вывод, очень простое. Он читает из консоли с помощью Console.Read () и записывает в нее с помощью Console.Write () . Я точно знаю, что эти данные доступны для чтения, поскольку у меня есть другое приложение, которое читает из них, используя стандартный ввод / вывод (не написанный на .NET).

6
задан Kasper Holdum 17 July 2011 в 03:17
поделиться