Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este tema aún no ha recibido ninguna valoración - Valorar este tema

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
)
/** @delegate */
public delegate void DataReceivedEventHandler (
	Object sender, 
	DataReceivedEventArgs e
)
No aplicable.

Parámetros

sender

Origen del evento.

e

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, se debe agregar al evento una instancia del delegado. Siempre que se produzca el evento, se llamará al controlador del evento, a menos que se quite el delegado. Para obtener más información sobre los delegados de los controladores 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);
            }
        }
    }
}

Windows 98, Windows 2000 Service Pack 4, Windows Millennium, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.