Hallo, wie macht man sowas am besten: ich habe mehrere Backgroundworker, die verschiedene Aufgaben haben. Sind die Aufgaben erledigt, terminieren die Backgroundworker von alleine. Wenn der Backgroundworker beendet wurde, möchte ich ihn wieder neu aufrufen mit anderen Parametern. Manchmal will ich auch erst noch einen anderen BGW aufrufen und weitermachen wenn der fertig hat. Also quasi eine Liste an Aufgaben abarbeiten. Ich mache ungerne ein: while(backgroundworker1.isbusy) { //do nothing application.doevents(); } um auf die Abarbeitungen der Backgroundworker zu warten. Gibts da nicht ein besseres Entwurfsmuster? Eines bei dem die GUI lebendig bleibt ohne application.doevents()? Viele Grüße!
Welche Sprache? Hm, anscheinend C#? Wieso sollte die GUI nicht lebendig bleiben? Es läuft halt ein Haupt-Thread, dieser legt "Sub-Threads" an falls benötigt. Andererseits kenne ich mich mit C# nicht aus. Wer weiß was die da für komische Dinge machen ;)
Messknecht schrieb: > um auf die Abarbeitungen der Backgroundworker zu warten. > Gibts da nicht ein besseres Entwurfsmuster? Eines bei dem die GUI > lebendig bleibt ohne application.doevents()? > > Viele Grüße! RunWorkerCompleted wird autom. ausgelöst... oder man könnte mit ProgressChanged entsprechendes "mitteilen" http://msdn.microsoft.com/de-de/library/system.componentmodel.backgroundworker.runworkercompleted.aspx http://msdn.microsoft.com/de-de/library/system.componentmodel.backgroundworker_events.aspx
Ja sorry C#. Ist klar, die Events kenne ich, aber wie mache ich eine Liste von Aufgaben. Jede Aufgabe (BGW) wird vom GUI-Thread gestartet. Dann soll der GUI-Thread warten bis die Aufgabe erledigt ist, aber ohne zu blockieren und ohne while(){application.doevents}
Messknecht schrieb: > Gibts da nicht ein besseres Entwurfsmuster? Eines bei dem die GUI > lebendig bleibt ohne application.doevents()? Ja, gibt es, z.B. den Thread Pool: http://msdn.microsoft.com/de-de/library/y5htx827(v=vs.100).aspx Die elegantere Lösung wäre das Tasken von Aufgaben: http://msdn.microsoft.com/de-de/library/dd235678(v=vs.100).aspx
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.