ProcessStartInfo suspendus sur “WaitForExit”? Pourquoi?

J'ai le code suivant:

info = new System.Diagnostics.ProcessStartInfo("TheProgram.exe", String.Join(" ", args));
info.CreateNoWindow = true;
info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
System.Diagnostics.Process p = System.Diagnostics.Process.Start(info);
p.WaitForExit();
Console.WriteLine(p.StandardOutput.ReadToEnd()); //need the StandardOutput contents

Je sais que la sortie du processus, je suis de départ est d'environ 7MO de long. De l'exécuter dans la console Windows fonctionne très bien. Malheureusement, par programmation, cela se bloque indéfiniment à WaitForExit. Notez également ce code ne raccrochez PAS pour les petites sorties (comme 3KB).

Est-il possible qu'à l'interne, StandardOutput dans ProcessStartInfo ne pouvez pas le tampon de 7MO? Si oui, que dois-je faire à la place? Si non, ce que je fais mal?

  • solution définitive avec le code source complet à ce sujet ?
  • Je rencontre le même problème et ce comment j'ai pu le résoudre stackoverflow.com/questions/2285288/...
  • Oui, la solution finale: permuter les deux dernières lignes. C'est dans le manuel.
  • à partir de msdn: L'exemple de code permet d'éviter une situation de blocage en appelant p.StandardOutput.ReadToEnd avant p.WaitForExit. Une condition de blocage peut se produire si le processus parent appelle p.WaitForExit avant p.StandardOutput.ReadToEnd et le processus de l'enfant écrit assez de texte pour remplir la redirection de flux. Le processus parent serait d'attendre indéfiniment le processus de l'enfant à la sortie. Le processus de l'enfant serait d'attendre indéfiniment pour les parents à lire à partir de la pleine StandardOutput flux.
  • c'est un peu embêtant comment complexe est de le faire correctement. A été heureux de travailler autour d'elle avec de plus simple ligne de commande redirige > outputfile 🙂
InformationsquelleAutor Epaga | 2008-09-26