Exportar (0) Imprimir
Expandir todo
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
Este tema aún no ha recibido ninguna valoración - Valorar este tema

ProcessStartInfo.RedirectStandardOutput (Propiedad)

Obtiene o establece un valor que indica si la salida de una aplicación se escribe en la secuencia de Process.StandardOutput.

Espacio de nombres:  System.Diagnostics
Ensamblado:  System (en System.dll)
member RedirectStandardOutput : bool with get, set

Valor de propiedad

Tipo: System.Boolean
true si la salida se debe escribir en Process.StandardOutput; si no, false. El valor predeterminado es false.

Cuando un Process escribe texto en la secuencia estándar, dicho texto se muestra normalmente en la consola. Si se redirige la secuencia de StandardOutput, se puede manipular o suprimir el resultado de un proceso. Por ejemplo, se puede filtrar el texto, aplicarle otro formato o escribir el resultado en la consola y en un archivo de registro designado.

NotaNota

Es preciso establecer el valor de UseShellExecute en false si se desea establecer el valor de RedirectStandardOutput en true. De lo contrario, al leer la secuencia de StandardOutput, se produce una excepción.

La secuencia de StandardOutput redirigida 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.

NotaNota

La aplicación que está procesando la salida asincrónica debería llamar al método WaitForExit para asegurarse de que se ha vaciado el búfer de salida.

Las operaciones de lectura sincrónica introducen una dependencia entre el llamador que lee de la secuencia de StandardOutput y el proceso secundario que escribe en esa secuencia. Estas dependencias pueden producir las condiciones del interbloqueo. Cuando el llamador lee la secuencia redirigida de un proceso secundario, depende del proceso secundario. El llamador espera la operación de lectura hasta que el proceso secundario escribe en la secuencia o cierra la secuencia. Cuando el proceso secundario escribe suficientes datos para rellenar su secuencia redirigida, depende del proceso principal. El proceso secundario espera la siguiente operación de escritura hasta que el proceso primario lee la secuencia completa o cierra la secuencia. El interbloqueo se produce cuando el llamador y el proceso secundario se esperan el uno al otro para completar una operación y ninguno puede continuar. Los interbloqueos se pueden evitar evaluando las dependencias entre el llamador y el proceso secundario.

En el siguiente ejemplo de código C#, se muestra cómo leer una secuencia redirigida y esperar a que finalice el proceso secundario.

// Start the child process.
 Process p = new Process();
 // Redirect the output stream of the child process.
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardOutput = true;
 p.StartInfo.FileName = "Write500Lines.exe";
 p.Start();
 // Do not wait for the child process to exit before
 // reading to the end of its redirected stream.
 // p.WaitForExit();
 // Read the output stream first and then wait.
 string output = p.StandardOutput.ReadToEnd();
 p.WaitForExit();

En el ejemplo de código, se evita el interbloqueo llamando a p.StandardOutput.ReadToEnd antes que a p.WaitForExit. Puede producirse una situación de interbloqueo si el proceso primario llama a p.WaitForExit antes que a p.StandardOutput.ReadToEnd y el proceso secundario escribe texto suficiente para rellenar la secuencia redirigida. El proceso primario esperaría indefinidamente a que finalizara el proceso secundario. El proceso secundario esperaría indefinidamente a que el proceso primario lea la secuencia de StandardOutput completa.

Existe un problema similar cuando se lee todo el texto de las secuencias de salida y de error estándar. En el siguiente ejemplo de código C# se realiza una operación de lectura en ambas secuencias.

 // Do not perform a synchronous read to the end of both 
 // redirected streams.
 // string output = p.StandardOutput.ReadToEnd();
 // string error = p.StandardError.ReadToEnd();
 // p.WaitForExit();
 // Use asynchronous read operations on at least one of the streams.
 p.BeginOutputReadLine();
 string error = p.StandardError.ReadToEnd();
 p.WaitForExit();

En el ejemplo de código se evita el interbloqueo realizando operaciones de lectura asincrónica en la secuencia de StandardOutput. Puede producirse una situación de interbloqueo si el proceso primario llama a p.StandardOutput.ReadToEnd y, a continuación a p.StandardError.ReadToEnd, y el proceso secundario escribe texto suficiente para rellenar la secuencia redirigida. El proceso primario esperaría indefinidamente a que el proceso secundario cerrara su secuencia de StandardOutput. El proceso secundario esperaría indefinidamente a que el proceso primario lea la secuencia de StandardError completa.

Se pueden utilizar las operaciones de lectura asincrónica para evitar estas dependencias y la posibilidad de un interbloqueo. Asimismo, se puede evitar una situación de interbloqueo creando dos subprocesos y leyendo el resultado de cada secuencia en subprocesos diferentes.

No hay ningún ejemplo de código disponible o este idioma no es compatible.

.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

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.
¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

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