las ich die Dokumentation für Process.StandardOutput, die dieses Zitat hat:Korrekter Weg, um Standardfehler zu behandeln und von einem Programm auszugeben, wenn es über die Prozessklasse von C# erzeugt wurde?
Ein Deadlock führen kann, wenn der übergeordnete Prozess p.WaitForExit vor p.StandardOutput.ReadToEnd und das Kind Prozess schreibt genug Text fordert die umgeleitet zu füllen Strom.
Also ich frage mich. Was ist der richtige Weg dies zu tun, wenn ich auch Angst habe, dass StandardError in einigen Szenarien erfüllt werden könnte?
Muss ich eine Schleife verwenden, um von der Standardausgabe und Fehler zu wechseln Lesen, entweder bis zu vermeiden Füllung oder ist dieser einfache Code genug:
string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Herausgegeben nach ein paar Antworten haben gepostet
Also das ist der richtige Ansatz?
var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Und dann verwende ich den Stringbuilder-Inhalt nur, wenn der Prozess tatsächlich abgeschlossen ist.
Ist das der richtige Ansatz?
Überprüfen Sie die Antwort http: // stackoverflow.com/a/7608823/276648 – user276648