Shell C # - redirecionamento de IO

Estou escrevendo um shell do Windows substituto em C #, e o recurso que estou implementando atualmente é ter todo o IO dentro da mesma janela do shell - ou seja, não abrir o cmd.exe em outra janela.

No momento, tenho uma solução parcial para a saída. Este é o meu código (onde p é o processo em execução):

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

O processo é configurado com todas as propriedades corretas, comoUseShellExecute = False, RedirectStandard{Input, Output, Error} = Truee os manipuladores de eventos são configurados corretamente, mas é inconsistente.

Eu tentei tirar o try / catch (que eu sei é extremamente prática ruim) e usando um bool ocupado, que é definido como false quando o manipulador é executado, mas por algum motivo, ainda recebo um InvalidOperationException em p.BeginOutputReadLine ( ) - informando que já existe uma operação assíncrona em execução.

Qualquer ajuda seria bem-vinda, mesmo que exigisse uma solução completamente diferente da solução acima, em vez de apenas consertá-la.

Obrigado.

EDITAR: Aqui está o código que inicia o processo:

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();

Além disso, percebi que não estou explicando o que quero dizer com inconsistente. Como se costuma dizer, uma imagem vale a pena2^3 palavras:

questionAnswers(1)

yourAnswerToTheQuestion