Laden...

Thread starten und GUI soll warten

Erstellt von RonnyW vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.921 Views
R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 16 Jahren
Thread starten und GUI soll warten

hi @ all,

ich hab folgendes problem... ich möchte einen prozess ausführen, der ein video vom flv zum avi convertiert... (kein problem) nun möchte ich aber eine message ausgeben, wenn die convertierung fertig abgeschlossen ist... nur wie mach ich das ?(

momentan siehts folgender maßen aus:


...
            Process ffmpeg = new Process();
            ffmpeg.StartInfo.UseShellExecute = false;
            ffmpeg.StartInfo.CreateNoWindow = true;
            ffmpeg.StartInfo.FileName = ffmpegExe;
            ffmpeg.StartInfo.Arguments = ffmpegInputFileParameter;
            ffmpeg.Start();

            MessageBox.Shoe("fertig");
...

so, wie ihr sehen könnt, prozess wird gestartet, nur die message wird sofort ausgegeben, obwohl der prozess noch nicht beendet ist... wie kann ich das realisieren?

RonnyW :evil:

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo RonnyW,

das hatten wir gerade erst: Backgroundworker Asnychron Problem bei Windows Forms . Sogar zweimal.

Siehe außerdem: Process.Exited

herbivore

R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 16 Jahren

hm... also dass man auf einen thread nicht warten muss, ist ehrlich geasgt in diesem fall eher falsch...

Verabschiede dich von dem Gedanken, dass du warten musst, bis ein Thread fertig ist. Das muss man eigentlich nie.

da ich schließlich erst das video anschauen kann, wenns fertig konvertiert ist...

ich hab jetzt vorerst


ffmpeg.WaitForExit();

benutzt, obwohl es nicht die beste form der anwendung ist, jedoch helfen mir die anderen beiden posts nicht wirklich weiter...

RonnyW :evil:

F
10.010 Beiträge seit 2004
vor 16 Jahren

Du scheinst es nicht verstehen zu wollen.

Natürlich ist es falsch in der Routine zu warten.
Das heisst aber nicht, das Du gleich mit der Verarbeitung weiter machen sollst.

Vorgehensweise:

  1. Aufruf der Funktion die Lange dauert ( in deinem Fall Process.... )
  2. Sperren der UI-ELemente für die Weiterverarbeitung.
  3. Routine Verlassen.
  4. Bei eintreffen des Ereignisses, das die Arbeit Fertig ist, UI-Elemente
    für die Weiterverarbeitung erlauben, oder die Weiterberarbeitung starten.
R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 16 Jahren

ich versteh das schon, mir zwängt sich jetzt nur eine weitere frage auf, wenn ich die UI-elemente sperre, wie kann ich dann einen fortschrittsbalken laufen und den text in einem label sich verändern lassen?

RonnyW :evil:

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo RonnyW,

das ist doch kein Widerspruch. Per Programm sind auch Controls änderbar, für die Enabled=false ist.

herbivore

R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 16 Jahren

jo das mein ich auch nicht, bei mir isses momentan so, durch das


ffmpeg.WaitForExit();

kann aber nix anklicken in meine prog, kein tab wechseln kein gar nix, daher geh ich davon aus, dass das komplette prog auf das ende des processes wartet und somit unantastbar is, versteht mich?

und ein fortschritsbalken dürfte sich auch nicht bewegen bzw den fortschritt anzeigen, wenn das ganze programm ja auf nix reagiert während des prozesses

RonnyW :evil:

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo RonnyW,

deshalb sollst du ja WaitForExit auch nicht benutzen, sondern das Process.Exited-Event. Damit du eben nicht warten musst und trotzdem mitbekommst, wann der Prozess beendet wurde.

Langsam scheint mir, dass FZelle recht hat. Du scheinst es nicht verstehen zu wollen. 🙂

Siehe auch [FAQ] Warum blockiert mein GUI?

herbivore

N
750 Beiträge seit 2004
vor 16 Jahren

mmmmmh

vielleicht auch mal da reingucken ->
[FAQ] Warum blockiert mein GUI?

nils

?( wer suchet, der findet auch! :]

R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 16 Jahren

ok habs jetzt, danke, ich wollts wirklich verstehen, hab heute aber zum ersten mal damit zu tun und somit wars net ganz einfach

danke trotzdem 😁

RonnyW :evil: