Senden von Eingaben / Abrufen von Ausgaben aus einer Konsolenanwendung (C # / WinForms)

Ich habe ein Formular mit 3 Steuerelementen:

Ein Textfeld, in das der Benutzer Befehle eingeben kann, die an eine Konsolenanwendung gesendet werden sollen.Eine Schaltfläche zum Bestätigen der zu sendenden Befehle undEin schreibgeschütztes Textfeld zum Anzeigen der Ausgabe der Anwendung.

Ich möchte, dass der Benutzer Befehle in das erste Textfeld eingibt. Drücken Sie die Taste, um über das zweite Textfeld eine Rückmeldung einzugeben.

Ich weiß, wie man es benutztProcessStartInfo.RedirectStandardOutput Die App bleibt jedoch hängen, wenn ich sie verwendeStandardOutput.ReadToEnd().

Ich habe mir das asynchrone angeschautProcess.BeginOutputReadLine() aber obwohl meine app nicht hängt, bekomme ich irgendwie keine antwort im textfeld, es tut absolut nichts.

Hier ist mein Code:

public partial class MainForm : Form
{

    private void MainForm_Load(object sender, EventArgs e)
    {
        InitializeInterpreter();
    }

    private void InitializeInterpreter()
    {
        InterProc.StartInfo.UseShellExecute = false;
        InterProc.StartInfo.FileName = "app.exe";
        InterProc.StartInfo.RedirectStandardInput = true;
        InterProc.StartInfo.RedirectStandardOutput = true;
        InterProc.StartInfo.RedirectStandardError = true;
        InterProc.StartInfo.CreateNoWindow = true;
        InterProc.OutputDataReceived += new DataReceivedEventHandler(InterProcOutputHandler);

        InterProc.Start();
    }

    private static void InterProcOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        if (!String.IsNullOrEmpty(outLine.Data))
        {
           OutputTextBox.Append(Environment.NewLine + outLine.Data);
        }
    }

    private void Enterbutton_Click(object sender, EventArgs e)
    {
        InterProc.StandardInput.Write(CommandtextBox.Text);
        InterProc.BeginOutputReadLine();
    }
}

Kann ich das auf irgendeine Weise reibungslos ablaufen lassen? Vielen Dank.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage