Laden...

Batch per ClickEvent starten und CMD in TextBox auslesen

Erstellt von Kobas17 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.902 Views
K
Kobas17 Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren
Batch per ClickEvent starten und CMD in TextBox auslesen

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();
        }
C
2.121 Beiträge seit 2010
vor 6 Jahren

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.

K
Kobas17 Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren

Ja das stimmt soll er auch, leider bekomme ich dann aber eine Art Deadlook , kann mein Programm nicht mehr bedienen 😦

P
441 Beiträge seit 2014
vor 6 Jahren

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.

5.658 Beiträge seit 2006
vor 6 Jahren

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