У меня есть консольное приложение (C #), которое поддерживает состояние.Состояние может быть изменено путем подачи приложения с различным вводом через консоль.Мне нужно иметь возможность одновременно подавать в приложение немного ввода, затем читать промывку и повторять.
Я создаю новый процесс и выполняю всю обычную работу по перенаправлению ввода / вывода.Проблема в том, что после того, как я отправил ввод и вызвал ReadLine()
на стандартном выходе, он не возвращает значение, прежде чем я вызову Close()
на стандартном вводе, после чего я больше не могу записывать в поток ввода.1006 * Как сохранить открытый поток ввода при получении вывода?
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).