C # Shell - перенаправление ввода-вывода

Я пишу заменяющую оболочку Windows на C #, и функция, которую я сейчас реализую, заключается в том, чтобы все операции ввода-вывода были в одном и том же окне оболочки, т. Е. Не открывать cmd.exe в другом окне.

Прямо сейчас у меня есть частичное решение для вывода. Это мой код (где p - это запущенный процесс):

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

Процесс настроен со всеми правильными свойствами, такими какUseShellExecute = False, RedirectStandard{Input, Output, Error} = Trueи обработчики событий установлены правильно, но это противоречиво.

Я попытался удалить try / catch (что я знаю, что это очень плохая практика) и использовать занятый bool, который устанавливается в false при запуске обработчика, но по какой-то причине я все еще получаю InvalidOperationException для p.BeginOutputReadLine ( ) - заявив, что асинхронная операция уже запущена.

Мы будем благодарны за любую помощь, даже если она требует совершенно другого решения, чем приведенное выше, а не просто исправления.

Благодарю.

EDITВот код, который запускает процесс:

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

Кроме того, я понял, что не объясняю, что я имею в виду под непоследовательностью. Как говорится, картинка стоит2^3 слова:

screenshot

Ответы на вопрос(1)

Ваш ответ на вопрос