Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Process.StandardError (Propiedad)

 

Obtiene una secuencia que se usa para leer la salida de errores de la aplicación.

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

[<BrowsableAttribute(false)>]
member StandardError : StreamReader with get

Valor de propiedad

Type: System.IO.StreamReader

StreamReader que puede usarse para leer la secuencia de error estándar de la aplicación.

Exception Condition
InvalidOperationException

La StandardError no se ha definido la secuencia para la redirección; Asegúrese de que ProcessStartInfo.RedirectStandardError está establecido en true y ProcessStartInfo.UseShellExecute se establece en false.

o bien

El StandardError ha abierto la secuencia de operaciones de lectura asincrónica con BeginErrorReadLine.

Cuando un Process escribe texto en su secuencia de error estándar, que el texto se muestra normalmente en la consola.Redirigiendo el StandardError secuencia, puede manipular o suprimir la salida de error de un proceso.Por ejemplo, puede filtrar el texto, aplicarle otro formato o escribir el resultado en la consola y un archivo de registro designado.

System_CAPS_noteNota

Utilizar StandardError, debe establecer ProcessStartInfo.UseShellExecute a false, y debe establecer ProcessStartInfo.RedirectStandardError a true.De lo contrario, al leer desde el StandardError secuencia produce una excepción.

El redirigido StandardError secuencia puede leerse de manera sincrónica o asincrónica.Métodos como Read, ReadLine, y ReadToEnd realizar operaciones de lectura sincrónicas en la secuencia de salida de error del proceso.Estos sincrónico leen las operaciones no se completan hasta que se ha asociado Process escribe en su StandardError transmitir o cierra la secuencia.

En cambio, BeginErrorReadLine las operaciones de lectura asincrónica se inicia en el StandardError secuencia.Este método permite que 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.

Sincrónico lee operaciones introducen una dependencia entre el llamador que lee de la StandardError escribir en esa secuencia de proceso de flujo y el elemento secundario.Estas dependencias pueden generar condiciones de interbloqueo.Cuando el llamador lee la secuencia redirigida de un proceso secundario, depende del elemento secundario.El llamador espera la operación de lectura hasta que el elemento secundario se escribe en la secuencia o cierra la secuencia.Cuando el proceso secundario escribe suficientes datos para rellenar su secuencia redirigida, depende en el elemento primario.El proceso secundario espera la siguiente operación de escritura hasta que el elemento primario lee la secuencia completa o cierra la secuencia.El interbloqueo se produce cuando el llamador y el proceso secundario se esperan para completar una operación y ninguno puede continuar.Puede evitar los interbloqueos evaluando las dependencias entre el llamador y el proceso secundario.

El siguiente código de C#, por ejemplo, muestra cómo leer una secuencia redirigida y esperar a que termine el proceso secundario.

// Start the child process.
 Process p = new Process();
 // Redirect the error stream of the child process.
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardError = 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 error stream.
 // p.WaitForExit();
 // Read the error stream first and then wait.
 string error = p.StandardError.ReadToEnd();
 p.WaitForExit();

El ejemplo de código evita el interbloqueo llamando a p.StandardError.ReadToEnd antes de p.WaitForExit.Puede producirse una situación de interbloqueo si el elemento primario procesa llamadas p.WaitForExit antes de p.StandardError.ReadToEnd y el proceso secundario escribe texto suficiente para rellenar la secuencia redirigida.El proceso primario esperaría indefinidamente para que el proceso secundario salir.El proceso secundario esperaría indefinidamente para que el elemento primario leer desde el completo StandardError secuencia.

Hay un problema similar al leer todo el texto de la salida estándar y los flujos de error estándar.El siguiente código de C#, por ejemplo, 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();

El ejemplo de código, evita el interbloqueo realizando asincrónica las operaciones de lectura en el StandardOutput secuencia.Da como resultado una condición de interbloqueo si el elemento primario procesa llamadas p.StandardOutput.ReadToEnd seguido de p.StandardError.ReadToEnd y el proceso secundario escribe texto suficiente para rellenar la secuencia.El proceso primario esperaría indefinidamente para que el proceso secundario cerrar su StandardOutput secuencia.El proceso secundario esperaría indefinidamente para que el elemento primario leer desde el completo StandardError secuencia.

Puede utilizar las operaciones de lectura asincrónicas para evitar estas dependencias y la posibilidad de un interbloqueo.Como alternativa, puede evitar el interbloqueo creando dos subprocesos y leyendo el resultado de cada secuencia en un subproceso independiente.

System_CAPS_noteNota

No se pueden mezclar las operaciones de lectura sincrónicas y asincrónicas en una secuencia redirigida.Una vez en la secuencia redirigida de un Process se abre en modo asincrónico o sincrónico, todas lectura más operaciones en esa secuencia deben ser del mismo modo.Por ejemplo, no siga BeginErrorReadLine con una llamada a ReadLine en el StandardError secuencia, o viceversa.Sin embargo, puede leer dos secuencias diferentes en modos diferentes.Por ejemplo, puede llamar a BeginOutputReadLine y, a continuación, llame a ReadLine para el StandardError secuencia.

En el ejemplo siguiente se usa el net use comando junto con un usuario proporciona el argumento para asignar un recurso de red.A continuación, se lee la secuencia de error estándar del comando net y se escribe en la consola.

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

LinkDemand

for full trust for the immediate caller.This member cannot be used by partially trusted code.

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: