, может возникнуть ситуация взаимоблокировки. Я прочитал документацию для 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);
И затем я использую содержимое конструктора строк, только если процесс действительно завершен.
Это правильный подход тогда?