Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

DataReceivedEventHandler (Delegado)

Representa el método que controlará los eventos OutputDataReceived o ErrorDataReceived de un Process.

Espacio de nombres:  System.Diagnostics
Ensamblado:  System (en System.dll)

public delegate void DataReceivedEventHandler(
	Object sender,
	DataReceivedEventArgs e
)

Parámetros

sender
Tipo: System.Object
Origen del evento.
e
Tipo: System.Diagnostics.DataReceivedEventArgs
Objeto DataReceivedEventArgs que contiene los datos del evento.

Cuando se crea un delegado DataReceivedEventHandler, se identifica el método que controlará el evento. Para asociar el evento al controlador de eventos, agregue al evento una instancia del delegado. A menos que se quite el delegado, el controlador de eventos recibirá una llamada siempre que se produzca el evento. Para obtener más información acerca de los delegados del controlador de eventos, vea Eventos y delegados.

Para recopilar de forma asincrónica la secuencia de salida redirigida de StandardOutput o StandardError de un proceso, agregue el controlador de eventos a los eventos OutputDataReceived o ErrorDataReceived. Se provocan estos eventos cada vez que el proceso escribe una línea en la secuencia redirigida correspondiente. Cuando esta secuencia se cierra, se envía una línea null al controlador de eventos. Asegúrese de que el controlador de eventos comprueba esta condición antes de tener acceso a la propiedad Data. Por ejemplo, puede utilizar el método staticString.IsNullOrEmpty para validar la propiedad Data en el controlador de eventos.

El siguiente ejemplo muestra cómo realizar operaciones asincrónicas de lectura en la secuencia redirigida StandardOutput del comando sort. El comando sort es una aplicación de consola que lee y ordena la entrada de texto.

En este ejemplo se crea un delegado DataReceivedEventHandler para el controlador de eventos SortOutputHandler y se asocia el delegado al evento OutputDataReceived. El controlador de eventos recibe líneas de texto de la secuencia de StandardOutput redirigida, aplica formato al texto y escribe el texto en la pantalla.


// Define the namespaces used by this sample.
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.ComponentModel;

namespace ProcessAsyncStreamSamples
{
    class SortOutputRedirection
    {
        // Define static variables shared by class methods.
        private static StringBuilder sortOutput = null;
        private static int numOutputLines = 0;

        public static void SortInputListText()
        {
            // Initialize the process and its StartInfo properties.
            // The sort command is a console application that
            // reads and sorts text input.

            Process sortProcess;
            sortProcess = new Process();
            sortProcess.StartInfo.FileName = "Sort.exe";

            // Set UseShellExecute to false for redirection.
            sortProcess.StartInfo.UseShellExecute = false;

            // Redirect the standard output of the sort command.  
            // This stream is read asynchronously using an event handler.
            sortProcess.StartInfo.RedirectStandardOutput = true;
            sortOutput = new StringBuilder("");

            // Set our event handler to asynchronously read the sort output.
            sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);

            // Redirect standard input as well.  This stream
            // is used synchronously.
            sortProcess.StartInfo.RedirectStandardInput = true;

            // Start the process.
            sortProcess.Start();

            // Use a stream writer to synchronously write the sort input.
            StreamWriter sortStreamWriter = sortProcess.StandardInput;

            // Start the asynchronous read of the sort output stream.
            sortProcess.BeginOutputReadLine();

            // Prompt the user for input text lines.  Write each 
            // line to the redirected input stream of the sort command.
            Console.WriteLine("Ready to sort up to 50 lines of text");

            String inputText;
            int numInputLines = 0;
            do 
            {
                Console.WriteLine("Enter a text line (or press the Enter key to stop):");

                inputText = Console.ReadLine();
                if (!String.IsNullOrEmpty(inputText))
                {
                    numInputLines ++;
                    sortStreamWriter.WriteLine(inputText);
                }
            }
            while (!String.IsNullOrEmpty(inputText) && (numInputLines < 50));
            Console.WriteLine("<end of input stream>");
            Console.WriteLine();

            // End the input stream to the sort command.
            sortStreamWriter.Close();

            // Wait for the sort process to write the sorted text lines.
            sortProcess.WaitForExit();

            if (numOutputLines > 0)
            {
                // Write the formatted and sorted output to the console.
                Console.WriteLine(" Sort results = {0} sorted text line(s) ", 
                    numOutputLines);
                Console.WriteLine("----------");
                Console.WriteLine(sortOutput);
            }
            else 
            {
                Console.WriteLine(" No input lines were sorted.");
            }

            sortProcess.Close();
        }

        private static void SortOutputHandler(object sendingProcess, 
            DataReceivedEventArgs outLine)
        {
            // Collect the sort command output.
            if (!String.IsNullOrEmpty(outLine.Data))
            {
                numOutputLines++;

                // Add the text to the collected output.
                sortOutput.Append(Environment.NewLine + 
                    "[" + numOutputLines.ToString() + "] - " + outLine.Data);
            }
        }
    }
}

namespace ProcessAsyncStreamSamples
{

    class ProcessSampleMain
    {
        /// The main entry point for the application.
        static void Main()
        {
            try 
            {
                SortOutputRedirection.SortInputListText();
            }
            catch (InvalidOperationException e)
            {
                Console.WriteLine("Exception:");
                Console.WriteLine(e.ToString());
            }
        }
    }
}


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft