C # Standard-Ausgangsverzögerung verarbeiten

Von einem C # -Formular aus führe ich ein @ aProzes mit Startinformationen ähnlich wieKonsolenausgabe in Textbox in separatem Programm umleiten und C # Prozessausgabe während der Ausführung erhalten, der Prozess läuft korrekt ab, es dauert jedoch lange, bis die Ausgabe im @ erscheinDataReceived event.

Ich möchte den Text sehen, sobald der Prozess ihn erzeugt. gemäßProcess Standardausgabe kann nicht erfasst werden? (erster Kommentar) Ich muss warten, bis ein Puffer von 2 bis 4 KB gefüllt ist, bevor das Ereignis ausgelöst wird.

Wie angefordert ist dies der Code:

void pcs_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
    if (!string.IsNullOrEmpty(e.Data)) 
        textBox1.BeginInvoke((Action)delegate { textBox1.AppendText(text + "\n"); });
}

private void LER_Go_Click(object sender, EventArgs e)
{
    // variables LiDARExtRep contains the full path to an executable file
    // that runs in DOS and produces verbose output.
    // LER_Path.Text is the parameter passed to LiDARExtRep (only one arg for this example)
    ProcessStartInfo pStartInfo = new ProcessStartInfo(LiDARExtRep, LER_Path.Text);    
    pStartInfo.UseShellExecute = false;
    pStartInfo.ErrorDialog = false;
    pStartInfo.RedirectStandardError = true;
    pStartInfo.RedirectStandardInput = true;
    pStartInfo.RedirectStandardOutput = true;
    pStartInfo.CreateNoWindow = true;

    System.Diagnostics.Process pcs = new System.Diagnostics.Process();
    pcs.StartInfo = pStartInfo;

    bool pStarted = pcs.Start();

    pcs.OutputDataReceived += new DataReceivedEventHandler(pcs_OutputDataReceived);

    pcs.BeginOutputReadLine();
    pcs.WaitForExit();
}

Ich sehe nichts Besonderes daran, es ist genau das gleiche wie die Beispiele, auf die ich verwiesen habe ... ein einfaches"Dir","/b/s" im Konstruktor sollte das gleiche Ergebnis liefern.

Gibt es eine Möglichkeit, den Puffer auf einige Bytes zu verkleinern, oder eine bessere Möglichkeit, ein Befehlszeilentool auszuführen und die Ausgabe in Echtzeit zu empfangen?

Background: Ich habe eine Reihe von Kommandozeilenprogrammen in C ++ geschrieben, die funktionierengroßarti, aber die jüngere Generation scheint Angst vor DOS zu haben, also erstelle ich ein Formular (GUI), um die Parameter für diese Tools zu sammeln, wie es scheint, einMeng weniger Arbeit als der Versuch, eine GUI für jedes Programm in C ++ zu erstellen. Wenn ich keine Echtzeitantworten bekomme, muss ichUseShellExecute = true; und zeige das Befehlsfenster.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage