Ho letto la documentazione per Process.StandardOutput, che ha questa citazione:Modo corretto per gestire l'errore standard e l'output da un programma quando è stato generato tramite la classe Process da C#?
una condizione di deadlock può verificarsi se il processo padre chiama p.WaitForExit prima p.StandardOutput.ReadToEnd e il processo figlio scrive testo sufficiente per riempire il reindirizzato ruscello.
Quindi mi chiedo. Qual è il modo corretto di farlo se temo anche che StandardError possa essere compilato in alcuni scenari?
Devo utilizzare un ciclo di alternare la lettura da standard output ed errori, per evitare sia riempiendo, o si tratta di semplice codice basta:
string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
A cura dopo alcune risposte sono state postato
Quindi questo è l'approccio giusto?
var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
E quindi utilizzo il contenuto del stringbuilder solo se il processo è effettivamente terminato.
E 'l'approccio giusto allora?
Controllare la risposta http: // stackoverflow.it/a/7608823/276648 – user276648