Process.OutputDataReceived Zdarzenie

Definicja

Występuje za każdym razem, gdy aplikacja zapisuje wiersz do przekierowanego strumienia StandardOutput .

C#
public event System.Diagnostics.DataReceivedEventHandler? OutputDataReceived;
C#
public event System.Diagnostics.DataReceivedEventHandler OutputDataReceived;
C#
[System.ComponentModel.Browsable(true)]
public event System.Diagnostics.DataReceivedEventHandler OutputDataReceived;

Typ zdarzenia

Atrybuty

Przykłady

Poniższy przykład ilustruje sposób wykonywania asynchronicznych operacji odczytu na przekierowanym StandardOutput strumieniu ipconfig polecenia.

W przykładzie OutputHandler tworzony jest delegat zdarzenia dla programu obsługi zdarzeń i kojarzy go ze zdarzeniem OutputDataReceived . Procedura obsługi zdarzeń odbiera wiersze tekstowe ze strumienia przekierowanego StandardOutput , formatuje tekst i zapisuje go w ciągu wyjściowym, który jest później wyświetlany w oknie konsoli przykładu.

C#
using System;
using System.IO;
using System.Diagnostics;
using System.Text;

class StandardAsyncOutputExample
{
    private static int lineCount = 0;
    private static StringBuilder output = new StringBuilder();

    public static void Main()
    {
        Process process = new Process();
        process.StartInfo.FileName = "ipconfig.exe";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
        {
            // Prepend line numbers to each line of the output.
            if (!String.IsNullOrEmpty(e.Data))
            {
                lineCount++;
                output.Append("\n[" + lineCount + "]: " + e.Data);
            }
        });

        process.Start();

        // Asynchronously read the standard output of the spawned process.
        // This raises OutputDataReceived events for each line of output.
        process.BeginOutputReadLine();
        process.WaitForExit();

        // Write the redirected output to this application's window.
        Console.WriteLine(output);

        process.WaitForExit();
        process.Close();

        Console.WriteLine("\n\nPress any key to exit.");
        Console.ReadLine();
    }
}

Uwagi

Zdarzenie OutputDataReceived wskazuje, że skojarzony Process napisał wiersz, który został zakończony nowym wierszem (powrotu karetki (CR), kanałem informacyjnym (LF) lub CR+LF) do przekierowanego strumienia StandardOutput .

Zdarzenie jest włączone podczas asynchronicznych operacji odczytu w programie StandardOutput. Aby rozpocząć asynchroniczne operacje odczytu, należy przekierować StandardOutput strumień Processobiektu , dodać procedurę obsługi zdarzeń do zdarzenia i wywołać metodę OutputDataReceivedBeginOutputReadLine. Następnie zdarzenie sygnalizuje za każdym razem, OutputDataReceived gdy proces zapisuje wiersz do przekierowanego StandardOutput strumienia, aż proces zakończy działanie lub wywołuje CancelOutputReadmetodę .

Uwaga

Aplikacja, która przetwarza dane wyjściowe asynchroniczne, powinna wywołać metodę WaitForExit , aby upewnić się, że bufor wyjściowy został opróżniony.

Dotyczy

Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Zobacz też