C # Shell - E / A-Umleitung

Ich schreibe eine Ersatz-Windows-Shell in C # und die Funktion, die ich derzeit implementiere, hat alle E / A-Vorgänge in demselben Shell-Fenster - dh, ich öffne cmd.exe nicht in einem anderen Fenster.

Im Moment habe ich eine Teillösung für die Ausgabe. Dies ist mein Code (wobei p der laufende Prozess ist):

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

Der Prozess wird mit allen richtigen Eigenschaften eingerichtet, wie zUseShellExecute = False, RedirectStandard{Input, Output, Error} = Trueund die Ereignishandler sind korrekt eingerichtet, aber inkonsistent.

Ich habe versucht, den try / catch-Befehl (von dem ich weiß, dass er extrem schlecht ist) auszuführen und einen beschäftigten Bool zu verwenden, der auf false gesetzt ist, wenn der Handler ausgeführt wird. Aus irgendeinem Grund erhalte ich jedoch immer noch eine InvalidOperationException auf p.BeginOutputReadLine ( ) - Gibt an, dass bereits eine asynchrone Operation ausgeführt wird.

Jede Hilfe wäre willkommen, auch wenn sie eine völlig andere Lösung erfordert als die oben beschriebene, anstatt sie nur zu beheben.

Vielen Dank.

BEARBEITEN: Hier ist der Code, der den Prozess startet:

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

Außerdem habe ich festgestellt, dass ich nicht erkläre, was ich unter inkonsistent verstehe. Wie sie sagen, ist ein Bild wert2^3 Wörter:

Antworten auf die Frage(1)

Ihre Antwort auf die Frage