que leer la documentación de Process.StandardOutput, que cuenta con esta cita:¿Manera correcta de manejar el error estándar y la salida de un programa cuando se generó a través de la clase de proceso desde C#?
Una condición de interbloqueo puede resultar si el proceso padre llama p.WaitForExit antes p.StandardOutput.ReadToEnd y el proceso de niño escribe texto suficiente para llenar el redirigida corriente.
Así que me pregunto. ¿Cuál es la forma correcta de hacer esto si también tengo miedo de que StandardError se pueda completar en algunos escenarios?
¿Tengo que utilizar un bucle para alternar la lectura de salida estándar y error, para evitar o bien llenando, o es el código bastante simple:
string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Editado después de algunas respuestas han sido publicado
Así que este es el enfoque correcto?
var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Y luego uso el contenido de stringbuilder solo si el proceso realmente finalizó.
es que el enfoque en ese momento?
Compruebe la respuesta http: // stackoverflow.com/a/7608823/276648 – user276648