Liebes Forum
Ich habe folgendes Problem. Ich löse einen Prozess aus der eine Batch Datei startet, die Funktionalität des Batches ist gegeben.
Sobald ich das CMD Fenster schließe erscheint auch der Inhalt in meiner Textbox. Ich möchte gerne erreichen das der Inhalt direkt
in die Textbox geschrieben wird ohne das ich das CMD Fester schließen muss, da der Batch länger läuft und viele Logs ausgibt.
Zudem kann ich meine Form nicht mehr bedienen wenn der Batch ausgeführt wird 😦
private void CopyStart1_Click(object sender, EventArgs e)
{
Process Send = new Process();
Send.StartInfo = new ProcessStartInfo("C:\\Users\\scripts\\copy.bat");
Send.StartInfo.CreateNoWindow = false;
Send.StartInfo.UseShellExecute = false;
Send.StartInfo.RedirectStandardError = true;
Send.StartInfo.RedirectStandardOutput = true;
Send.StartInfo.RedirectStandardOutput = true;
//Ausführen
Send.Start();
Send.WaitForExit();
StreamReader mySr = Send.StandardOutput;
textBox1.Text = mySr.ReadToEnd();
string stdOutput = Send.StandardOutput.ReadToEnd();
string stdError = Send.StandardError.ReadToEnd();
}
Ich kann nur vermuten, aber ReadToEnd hört sich an als würde es lesen bis nichts mehr zu lesen ist, sprich bis der Stream geschlossen wird, sprich bis dein Batch zu Ende ist. Erst dann gehts weiter.
Stattdessen willst du Zeichen einzeln aus dem Stream lesen, d.h. eine andere Methode suchen.
Ja das stimmt soll er auch, leider bekomme ich dann aber eine Art Deadlook , kann mein Programm nicht mehr bedienen 😦
Zusätzlich kommst du während dein Prozess läuft gar nicht bis zum lesen, denn du wartest mit
Send.WaitForExit();
erst darauf, dass der Prozess schließt, bevor du irgendwas ausliest.
Hi Kobas17,
eine Art Deadlook , kann mein Programm nicht mehr bedienen 😦
siehe dazu: [FAQ] Warum blockiert mein GUI?
Weeks of programming can save you hours of planning