Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

Process.BeginOutputReadLine (Método)

Inicia las operaciones de lectura asincrónica en la secuencia de StandardOutput redirigida de la aplicación.

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

[ComVisibleAttribute(false)]
public void BeginOutputReadLine()

ExcepciónCondición
InvalidOperationException

La propiedad ProcessStartInfo.RedirectStandardOutput es false.

‑O bien-

Ya hay una operación de lectura asincrónica en curso en la secuencia de StandardOutput.

‑O bien-

Una operación de lectura sincrónica ha utilizado la secuencia de StandardOutput.

La secuencia de StandardOutput puede leerse de manera sincrónica o asincrónica. Los métodos como Read, ReadLine y ReadToEnd realizan operaciones de lectura sincrónica en el flujo de salida del proceso. Estas operaciones de lectura sincrónica no terminan hasta que el Process asociado escribe en la secuencia de StandardOutput o cierra la secuencia.

Por contraste, BeginOutputReadLine inicia las operaciones de lectura asincrónica en la secuencia de StandardOutput. Este método habilita un controlador de eventos designado para los resultados de la secuencia y vuelve inmediatamente al llamador, que puede realizar otro trabajo mientras los resultados de la secuencia se dirigen al controlador de eventos.

Siga estos pasos para realizar operaciones de lectura asincrónica en StandardOutput para un Process:

  1. Establezca UseShellExecute en false.

  2. Establezca RedirectStandardOutput en true.

  3. Agregue el controlador de eventos al evento OutputDataReceived. El controlador de eventos debe coincidir con la firma de delegado de System.Diagnostics.DataReceivedEventHandler.

  4. Inicie Process.

  5. Llame a BeginOutputReadLine para el Process. Esta llamada inicia las operaciones de lectura asincrónica en StandardOutput.

Cuando se inician las operaciones de lectura asincrónica, se llama al controlador de eventos cada vez que el Process asociado escribe una línea de texto en su secuencia de StandardOutput.

Las operaciones de lectura asincrónica se pueden cancelar llamando a CancelOutputRead. El llamador o el controlador de eventos puede cancelar las operaciones de lectura. Después de cancelar, se puede volver a llamar a BeginOutputReadLine para reanudar las operaciones de lectura asincrónica.

NotaNota

No se pueden mezclar las operaciones de lectura asincrónica y las de lectura sincrónica en una secuencia redirigida. Cuando se abre la secuencia redirigida de un Process en modo asincrónico o sincrónico, todas las operaciones de lectura adicionales en esa secuencia deben estar en el mismo modo. Por ejemplo, después de BeginOutputReadLine no llame a ReadLine en la secuencia de StandardOutput o viceversa. Sin embargo, se pueden leer dos secuencias diferentes en modos diferentes. Por ejemplo, se puede llamar a BeginOutputReadLine y, a continuación, llamar a ReadLine para la secuencia de StandardError.

El siguiente ejemplo ilustra 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.

El ejemplo crea un delegado de evento para el controlador de evento SortOutputHandler y lo asocia con el 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, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

  • LinkDemand 

    para plena confianza del llamador inmediato. Este miembro no puede ser utilizado por código de confianza parcial.

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.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