Я прочитал документацию для Process.StandardOutput , в которой есть эта цитата:
Условие взаимоблокировки может возникнуть, если родительский процесс вызывает p.WaitForExit перед p.StandardOutput.ReadToEnd и дочерний процесс записывает достаточно текста для заполнения перенаправленного потока.
Так что мне интересно. Как правильно сделать это, если я также боюсь, что StandardError может быть заполнено в некоторых сценариях?
Должен ли я использовать цикл для чередования чтения из стандартного вывода и ошибки, чтобы избежать либо заполнения, либо этого простого кода достаточно:
string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Отредактировано после публикации некоторых ответов
Так что это правильный подход?
var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
И тогда я использую контент stringbuilder, только если процесс действительно завершен.
Тогда это правильный подход?