Прочитать на английском

Поделиться через


Process.OutputDataReceived Событие

Определение

Происходит, когда приложение записывает строку в свой перенаправленный поток StandardOutput.

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

Тип события

Атрибуты

Примеры

В следующем примере показано, как выполнять асинхронные операции чтения в перенаправленном StandardOutput потоке ipconfig команды.

В примере создается делегат события для обработчика OutputHandler событий и связывается с событием OutputDataReceived . Обработчик событий получает текстовые строки из перенаправленного StandardOutput потока, форматирует текст и сохраняет его в выходной строке, которая будет показана в окне консоли примера.

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();
    }
}

Комментарии

Событие OutputDataReceived указывает, что связанный Process объект записал строку, которая завершается новой строкой (возврат каретки (CR), каналом строки (LF) или CR+LF) в перенаправленный StandardOutput поток.

Событие включено во время асинхронных операций чтения в StandardOutput. Чтобы запустить асинхронные операции чтения, необходимо перенаправить StandardOutput поток Process, добавить обработчик событий в OutputDataReceived событие и вызвать BeginOutputReadLine. После этого событие сигнализирует каждый раз, OutputDataReceived когда процесс записывает строку в перенаправленный StandardOutput поток, пока процесс не завершит работу или вызовет CancelOutputRead.

Примечание

Приложение, обрабатывающее асинхронные выходные WaitForExit данные, должно вызвать метод , чтобы убедиться, что выходной буфер был удален.

Применяется к

См. также раздел