C # Shell - redirección de IO

Estoy escribiendo un shell de Windows de reemplazo en C #, y la función que estoy implementando actualmente es tener todas las IO dentro de la misma ventana del shell, es decir, no abrir cmd.exe en otra ventana.

En este momento, tengo una solución parcial para la salida. Este es mi código (donde p es el proceso en ejecución):

while ( !p.HasExited ) {
    /* ... - irrelevant */
    if ( redirect ) {
        try {
            p.BeginOutputReadLine();
        } catch { }
    }
}

El proceso se configura con todas las propiedades correctas, comoUseShellExecute = False, RedirectStandard{Input, Output, Error} = True, y los controladores de eventos están configurados correctamente, pero es inconsistente.

He intentado sacar el try / catch (que sé que es una práctica extremadamente mala), y usar un bool ocupado, que se establece en falso cuando se ejecuta el controlador, pero por alguna razón, todavía obtengo una excepción InvalidOperationException en p.BeginOutputReadLine ( ) - indicando que ya hay una operación asíncrona en ejecución.

Cualquier ayuda sería apreciada, incluso si requiere una solución completamente diferente a la anterior, en lugar de solo arreglarla.

Gracias.

EDITAR: Aquí está el código que inicia el proceso:

if (redirect)
{
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.UseShellExecute = false;
    p.OutputDataReceived += new DataReceivedEventHandler(redirectHandler_StdOut);
    p.ErrorDataReceived += new DataReceivedEventHandler(redirectHandler_StdErr);
}
p.Start();

Además, me he dado cuenta de que no estoy explicando lo que quiero decir con inconsistente. Como dicen, una imagen vale la pena.2^3 palabras:

Respuestas a la pregunta(1)

Su respuesta a la pregunta