consolenbefehl ausführen und rückgabewert auslesen in einer Form

Xo-mate

Erfahrenes Mitglied
Ich hab eine Form und will jetzt einen Befehl auführen, den ich normalerweise in der cmd ausführe. Dieser liefert Rückgabewerte. Mal sofort, mal alle x sekunden.

Das sieht ählich aus wie bei "ping".
Man kriegt ca. jede sekunde eine Rückmeldung geliefert wie hoch der Ping ist.

Wie krieg ich sowas in der Art ausgelesen?


Wenn das hier schon im Forum steht, dann tut mir der Beitrag leid, aber ich habs nicht gefunden.
 
Gehen wir davon aus, wir haben ein Batch-File namens test.bat. Dieses enthält den Befehl dir C:\. Diese Ausgabe soll im Output-Fenster von Visual Studio ausgegeben werden (kann natürlich auch wo anders hingeschrieben werden).

Hier die Variante, wenn du alles auf einmal auslesen möchtest:
C#:
ProcessStartInfo psi = new ProcessStartInfo("C:\\test.bat");
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = new Process();

p.StartInfo = psi;
p.Start();

StreamReader sr = p.StandardOutput;

p.WaitForExit();
string output = sr.ReadToEnd();

sr.Close();

Debug.WriteLine(output);

Und hier nun, wenn du die Daten ausgeben möchtest, wie sie gerade anfallen:
C#:
private void StartConsoleApp()
{
    ProcessStartInfo psi = new ProcessStartInfo("C:\\test.bat");
    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    Process p = new Process();

    p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
    p.StartInfo = psi;
    p.Start();
    p.BeginOutputReadLine();

    p.WaitForExit();            
}

void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Debug.WriteLine(e.Data);
}
 
Zurück