.NET Process Output Capture: Ein umfassender Leitfaden
Das Ausführen externer Befehle oder Anwendungen in .NET-Programmen erfordert die Verarbeitung und Erfassung ihrer Ausgabe. In diesem Leitfaden werden die Schritte und Überlegungen zum effizienten Starten eines Unterprozesses und zum Erfassen seiner Standardausgabe (STDOUT) in .NET erläutert.
Verstehen Sie den Prozesserstellungsprozess
Um einen untergeordneten Prozess zu starten, erstellen Sie ein Process-Objekt und konfigurieren Sie seine StartInfo-Eigenschaft. Das Flag „CreateNoWindow“ stellt sicher, dass der Prozess ohne Konsolenfenster ausgeführt wird, während RedirectStandardOutput die Erfassung seiner Ausgabe über die Eigenschaft „StandardOutput“ ermöglicht.
Ausgabedaten verarbeiten
Wenn der untergeordnete Prozess eine Ausgabe erzeugt, wird das p.OutputDataReceived-Ereignis aufgerufen. Um diese Ausgabe zu empfangen und zu verarbeiten, erstellen Sie einen DataReceivedEventHandler-Delegaten und hängen Sie ihn an das Ereignis an. Verwenden Sie in diesem Handler einen StreamReader, um die Ausgabe zu lesen und sie in einer Zeichenfolge oder einer geeigneten Datenstruktur zu speichern.
Optimierung der Ereignisverarbeitung
Die asynchrone Ereignisbehandlung stellt sicher, dass die Anwendung auch dann reagiert, wenn die Ausgabe von untergeordneten Prozessen erfasst wird. Durch die Verwendung von process.BeginOutputReadLine() können Sie einen dedizierten Thread zum Verarbeiten der Ausgabedaten starten und so den Hauptthread für die Ausführung anderer Aufgaben freigeben.
Ausgabe direkt lesen
Während die Ereignisbehandlung für die Echtzeitüberwachung sehr nützlich ist, besteht eine einfachere Möglichkeit darin, die Ausgabe direkt mit p.StandardOutput.ReadToEnd() zu lesen. Diese Methode blockiert, bis die gesamte Ausgabe empfangen wurde. Dies bietet jedoch eine einfache Möglichkeit, die gesamte Ausgabe auf einmal zu erfassen.
Beispielcode
Hier ist ein Beispielcodeblock, der die Ausgabe des MSBuild-Prozesses erfasst:
<code class="language-csharp">Process process = new Process(); process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.OutputDataReceived += (sender, args) => { if (!args.Data.StartsWith("MSBUILD") && !args.Data.StartsWith("Info")) { Console.WriteLine($"已接收输出: {args.Data}"); } }; process.Start(); process.BeginOutputReadLine();</code>
Das obige ist der detaillierte Inhalt vonWie kann ich externe Prozessausgaben in .NET effizient erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!