Je lis la documentation Process.StandardOutput, qui a cette citation:Manière correcte de gérer l'erreur standard et la sortie d'un programme lorsqu'il est engendré via la classe Process de C#?
Une condition de blocage peut se produire si le processus parent appelle p.WaitForExit avant p.StandardOutput.ReadToEnd et le processus enfant écrit suffisamment de texte pour remplir le redirigée courant.
Alors je me demande. Quelle est la bonne façon de faire cela si j'ai aussi peur que StandardError puisse être rempli dans certains scénarios?
Dois-je utiliser une boucle pour alterner la lecture de la sortie standard et l'erreur, afin d'éviter soit remplir, ou est ce code assez simple:
string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Edité après quelques réponses ont été posté
Donc c'est la bonne approche?
var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
Et puis j'utilise le contenu stringbuilder seulement si le processus est terminé.
Est-ce la bonne approche alors?
Vérifiez la réponse http: // stackoverflow.com/a/7608823/276648 – user276648