Правильный способ обработки стандартной ошибки и вывода из программы при запуске через Класс процесса из 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);

И затем я использую содержимое конструктора строк, только если процесс действительно завершен.

Это правильный подход тогда?

7
задан Lasse V. Karlsen 9 November 2010 в 19:36
поделиться