My C# программа должна отправлять данные в стороннюю программу через стандартный вход. Тем не менее, программа ожидает, что входной поток достигнет EOF перед обработкой. Вот мой код:C# - Закрыть поток ввода дочернего процесса
// Starts the process.
var process = new Process();
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = "foo.exe";
process.Start();
// Sends data to child process.
var input = process.StandardInput;
input.WriteLine("eval('2 * PI')");
input.Flush();
input.Close();
// Reads the result.
var output = process.StandardOutput;
var result = output.ReadLine();
Программа ребенок не будет делать ничего, и мой C# код застревает в output.ReadLine()
вызова. Однако, если я убью процесс C#, тогда ребенок начнет точно работать с данными, которые я отправил. Как я могу заставить ребенка встретить EOF, пока я еще жив?
Спасибо, но не сработал. Процесс ожидает фактический конец файла, а не встроенный символ EOF. – fernacolo
Если закрытие потока не означает конец файла, что он ожидает? Возможно, перенаправление ввода обратно в программу даст программе необходимый ей сигнал. – tinstaafl
Это сработало для меня. Я никогда не понимал, что Windows использует SUB (0x1A) для EOF, вместо того, чтобы использовать EOT (0x04), как unix. –