ProgessBar in separatem Thread

Phreaky

Grünschnabel
Hallo,

ich möchte in einem bereits fertiggestellten Programm den Ladevorgang in der Statusbar mit einer Progessbar anzeigen.

Dabei verwende ich zwei methoden, StartPBar und StopPBar. Da die ProgressBar immer hängen bleibt wenn sie im selben thread läuft wie der Rest, möchte ich diese nun in einem separaten Thread laufen lassen.

Ersteinmal versuche ich einfach über ein Label auszugeben, dass mein Programm beschäftigt ist. Dazu hab ich also eine Mehthode die einen Thread startet in dem das Label geändert wird("Lade...").

Wenn ich nun nach dieser Methode das Hauptprogramm ausfürhe, sollte doch das Label sofort (da ja in separatem thread) geändert werden - allerdings hat sich zur threadlosen version nichts geändert (Berechnung wird durchgeführt, dann erst ändert sich das label).

Hat jemand ne Idee? Muss ich etwa noch einen Thread starten in dem die Berechnug läfut? Wäre ungeschickt da ich die StatusBar ja öfters an verschiedenen Stellen im Programm starten will...

Vielen Dank für Eure Hilfe,


Phreaky
 
Man kann nur aus dem Hauptthread auf Steuerelemente zugereifen.

Versuch es doch mit einem Backworkerjob, in dem die Sachen geladen werden. Mit dem Backworkerjob wirfst das ProgressEreignis den Status und kannst dann im Hauptthread behandeln und die Progressbar aktualisieren.
 
mage hat gesagt.:
Versuch es doch mit einem Backworkerjob, in dem die Sachen geladen werden. Mit dem Backworkerjob wirfst das ProgressEreignis den Status und kannst dann im Hauptthread behandeln und die Progressbar aktualisieren.

Das Problem ist ja dass ich die ProgressBar an vielen Stellen im Programm einsetzen will und für die verschiedensten Dinge (berechnungen, dbzugriffe...). Da wärs dann enorm aufwändig alle diese Sachen in nem BackgroundWorker laufen zu lassen?! Gibts da keine andere Möglichkeit? Die Statusbar soll auch einfach nur durchlaufen (marquee) und lediglich anzeigen dass das Programm noch "am leben" ist.
 
ok, das mit Invoke ist mir bekannt. Wenn ich nun jedoch direkt meinen StatusBar-Thread starte (neuer Thread wird gestartet) und anschließend gleich ne Berechnung laufen lasse, dann sollte das doch klappen oder? Hab jetzt immer noch das Problem, dass der StatusBar-Thread erst zu laufen beginnt wenn die Berechnung abgeschlossen ist. Liegt das evtl daran dass der Compiler zuerst mit der Berechnung anfängt und dann meinen Thread laufen lässt?
 
Hallo, hab jetzt meinen Denkfehler gefunden. Ich hab ja lediglich nen neuen Thread aufgerufen um die Statusbar laufen zu lassen (style = marquee). Wenn ich das richtig erkannt hab läuft sie aber dann im selben Thread in dem auch die Berechnung durchgeführt wird und stockt deshalb genauso.

So wie es aussieht müsste ich also wohl doch alle meine verschiedenen Aktionen im Programm in nem extra Thread laufen lassen um im Hautthread meine Statusbar laufen zu lassen.... gibts da keinen einfacheren Weg? Oder ne Möglichkeit anzuzeigen dass die Anwendung noch alive ist?

Danke, Phreaky
 
Hallo,

danke erstmal für Eure Tips, das mit DoEvents hat soweit geklappt, allerdings muss ich dabei ja auch wieder ziehmlich in das bestehende Porgramm eingreifen, also DoEvents einfügen und ausserdem muss ich die DoEvents ja zeitlich auch einigermaßen anpassen damit sie nicht zu oft dirchlaufen und damit unnötig Zeit verbraten.

Gibts da keine andere Möglichkeit? Ich möchte quasi ohne in die bestehenden Methoden einzugreifen vor den jeweiligen Methoden die StatusBar starten und danach wieder stoppen, ohne in den Methoden selber was zu ändern. Geht das nicht? Sieht man doch eigentlich öfters bei anderen Programmen.

Grüße,

Phreaky
 
Zuletzt bearbeitet:
Zurück