Externes Programm in Backgroundworker


CopWorker

Mitglied
Hallo,
ich versuche ein externes Programm (Konsolenanwendung) im Backgroundworker zu starten.
Grund hierfür ist, das meine Oberfläche blockiert ist so lange das externe Projekt läuft.
Als Übergabeparameter 1 (_strAppPath) beim Aufruf des Prozesses ist der Pfad der ausführenden Datei und
als Übergabeparameter 2 (_strCommandLine) beim Aufruf des Prozesses sind die Kommandozeilenargumente enthalten.

Bisheriger Code:
C#:
Process prcProc = new Process();
ProcessStartInfo psiProg = new ProcessStartInfo(_strAppPath, _strCommandLine); //Programmpfad und Kommansozeilenargument übergeben
psiProg.WindowStyle = pwsCmdShell; //Über die App.config einstellbar
psiProg.UseShellExecute = true;

//Prozess starten
prcProc = Process.Start(psiProg);
Code mit Backgroundworker
C#:
if (!bgwExecute.IsBusy)
    bgwExecute.RunWorkerAsync();
C#:
private void bgwExecute_DoWork(object sender, DoWorkEventArgs e)
{

    Process prcProc = new Process();
    ProcessStartInfo psiProg = new ProcessStartInfo(_strAppPath, _strCommandLine); //Programmpfad und Kommansozeilenargument übergeben
    psiProg.WindowStyle = pwsCmdShell; //Über die App.config einstellbar
    psiProg.UseShellExecute = true;

    //Prozess starten
    prcProc = Process.Start(psiProg);
    
}
Leider ändert sich an der Situation nicht.

Für Hilfe bin ich euch sehr dankbar.

Grüße von CopWorker
 

Spyke

Premium-User
So wies ausschaut wurde die Foren DB zurück gesetzt.
Deshalb nochmal in kurz Form was ich gestern schrieb.

DoWork selbst sollte UI nicht blockieren, was mir aufgefallen ist das bei dir ein prcProc.WaitForExit fehlt.
Sprich, so bräuchtest du den BW nicht, da nur kurz der Prozess angestoßen wird der rest des prozesses läuft extern weiter ohne deinen Prozess zu blockieren.
Willst du warten bis der Prozess fertig ist musst du noch WaitForExit entsprechend setzen und dann würde auch der BW sinn machen, da die weitere Methodenausführung wartet bis WaitForExit durch ist.

Prüf mal ob du ev. den BW zu oft (in eienr schleife oder so) aufrufst.
Das IsBusy wird ohne WaitForExit in paar Mili-/Nanosekunden kurz mal true gesetzt haben und wenn du dann direkt neuen Hintergrundthread anstartest könnte es natürlcih alles in die Knie zwingen.
 

Neue Beiträge