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