Forum: PC-Programmierung Entwurfsmuster GUI mit 2 Threads


von Messknecht (Gast)


Lesenswert?

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!

von Mark B. (markbrandis)


Lesenswert?

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 ;)

von Arc N. (arc)


Lesenswert?

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

von Messknecht (Gast)


Lesenswert?

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}

von Rocky B. (bitrocker)


Lesenswert?

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
Noch kein Account? Hier anmelden.