Heim > Backend-Entwicklung > C++ > Wie kann ich externe Prozessausgaben in .NET effizient erfassen?

Wie kann ich externe Prozessausgaben in .NET effizient erfassen?

Barbara Streisand
Freigeben: 2025-01-25 03:51:11
Original
502 Leute haben es durchsucht

How Can I Efficiently Capture External Process Output in .NET?

.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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage