Compartir vía


DataReceivedEventArgs.Data Propiedad

Definición

Obtiene la línea de caracteres escrita en un flujo de salida de Process redirigido.

public:
 property System::String ^ Data { System::String ^ get(); };
public string? Data { get; }
public string Data { get; }
member this.Data : string
Public ReadOnly Property Data As String

Valor de propiedad

Línea escrita por una secuencia Process asociada en su secuencia StandardOutput o StandardError redirigida.

Ejemplos

En el ejemplo de código siguiente se muestra un controlador de eventos simple asociado al OutputDataReceived evento. El controlador de eventos recibe líneas de texto de la secuencia redirigida StandardOutput , da formato al texto y escribe el texto en la pantalla.

using namespace System;
using namespace System::IO;
using namespace System::Diagnostics;
using namespace System::Text;

ref class StandardAsyncOutputExample
{
private:
    static int lineCount = 0;
    static StringBuilder^ output = nullptr;

public:
    static void Run()
    {
        Process^ process = gcnew Process();
        process->StartInfo->FileName = "ipconfig.exe";
        process->StartInfo->UseShellExecute = false;
        process->StartInfo->RedirectStandardOutput = true;
        output = gcnew StringBuilder();
        process->OutputDataReceived += gcnew DataReceivedEventHandler(OutputHandler);
        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();
    }

private:
    static void OutputHandler(Object^ sender, DataReceivedEventArgs^ e)
    {
        // Prepend line numbers to each line of the output.
        if (!String::IsNullOrEmpty(e->Data))
        {
            lineCount++;
            output->Append("\n[" + lineCount + "]: " + e->Data);
        }
    }
};

int main()
{
    StandardAsyncOutputExample::Run();
}
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();
    }
}
Imports System.IO
Imports System.Diagnostics
Imports System.Text

Module Module1
    Dim lineCount As Integer = 0
    Dim output As StringBuilder = New StringBuilder()

    Sub Main()
        Dim process As New Process()
        process.StartInfo.FileName = "ipconfig.exe"
        process.StartInfo.UseShellExecute = False
        process.StartInfo.RedirectStandardOutput = True
        AddHandler process.OutputDataReceived, AddressOf OutputHandler
        process.Start()

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

        Console.WriteLine(output)

        process.WaitForExit()
        process.Close()

        Console.WriteLine(Environment.NewLine + Environment.NewLine + "Press any key to exit.")
        Console.ReadLine()
    End Sub

    Sub OutputHandler(sender As Object, e As DataReceivedEventArgs)
        If Not String.IsNullOrEmpty(e.Data) Then
            lineCount += 1

            ' Add the text to the collected output.
            output.Append(Environment.NewLine + "[" + lineCount.ToString() + "]: " + e.Data)
        End If
    End Sub
End Module

Comentarios

Al redirigir o StandardOutputStandardError transmitir un objeto al controlador de Process eventos, se genera un evento cada vez que el proceso escribe una línea en la secuencia redirigida. La Data propiedad es la línea que escribió Process en el flujo de salida redirigido. El controlador de eventos puede usar la propiedad para filtrar la Data salida del proceso o escribir la salida en una ubicación alternativa. Por ejemplo, puede crear un controlador de eventos que almacene todas las líneas de salida de error en un archivo de registro de errores designado.

Una línea se define como una secuencia de caracteres seguida de una fuente de líneas ("\n") o un retorno de carro inmediatamente seguido de una fuente de línea ("\r\n"). Los caracteres de línea se codifican mediante la página de códigos ANSI predeterminada del sistema. La Data propiedad no incluye el retorno de carro de terminación ni la alimentación de línea.

Cuando se cierra el flujo redirigido, se envía una línea NULA al controlador de eventos. Asegúrese de que el controlador de eventos comprueba la Data propiedad correctamente antes de acceder a ella. Por ejemplo, puede usar el método String.IsNullOrEmpty estático para validar la propiedad en el Data controlador de eventos.

Se aplica a