Effiziente Erfassung der Standardausgabe von untergeordneten Prozessen in .NET
Das Abrufen der Standardausgabe (STDOUT) von einem untergeordneten Prozess in .NET kann schwierig sein. Dieser Artikel beschreibt eine Lösung, die auf der Erfahrung eines Entwicklers basiert.
Der Entwickler nutzte zunächst ereignisgesteuerte Rückrufe, um die Ausgabe einer Konsolenanwendung zu erfassen, die als untergeordneter Prozess gestartet wurde. Dieser Ansatz führte jedoch zu einem Deadlock, der die Auslösung des OutputDataReceived
-Ereignisses verhinderte.
Die Lösung bestand darin, auf einen direkten Lesevorgang aus dem StandardOutput
Stream des Prozesses umzusteigen:
<code class="language-csharp">return p.StandardOutput.ReadToEnd();</code>
Diese Methode erfasst effektiv alle Prozessausgaben.
Alternativ bietet die BeginOutputReadLine()
Methode einen ereignisgesteuerten Ansatz:
<code class="language-csharp">process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.OutputDataReceived += (sender, args) => Console.WriteLine("received output: {0}", args.Data); process.Start(); process.BeginOutputReadLine();</code>
Diese Techniken bieten zuverlässige Methoden zum Erfassen von STDOUT aus Konsolenanwendungen und verbessern die Interaktion und Überwachung untergeordneter Prozesse.
Das obige ist der detaillierte Inhalt vonWie kann ich die Standardausgabe von einem untergeordneten Prozess in .NET effizient erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!