Benutzer mit den meisten Antworten
wait Spinner macht nicht das was er machen soll

Frage
-
Hallo ich hätte wieder mal ein Problem
Neues Projekt, neues Problem. Im aktuellen Projekt gibt es eine Function in der viele Berechnungen gemacht werden, Daten aus einer Datei ausgelesen und wieder zurückgeschrieben werden. Das will ich optisch durch eine GIF Animation aufwerten. Erste Idee war eine PictureBox, da das GIF rein und in den Eigenschaften die PictureBox unsichtbar gemacht. Am Anfang der Function mache die PictureBox sichtbar, und am Ende halt wieder unsichtbar. Geht nicht. Alles in der Function wird gemacht, wenn das fertig ist erscheint mein Spinner. Keine Ahnung warum??? Ich habe dann mal eine Test Function geschrieben, in der ich alles zwischen sichtbar und unsichtbar weggelassen habe, und eine For Next Schleife eingefügt habe die etwa 10 Sekunden läuft, Ergebnis war das der Sinner auch wieder erst nach der Schleife erscheint.
Dann habe ich gegoogelt und eine Threadsichere Klasse gefunden, mit der ein Waiting-Spinner ei,und ausgeschaltet werden kann.
Ergebnis ist das gleiche wie bei meiner Idee.
Wer kann es richtig?
Hobby Programmierer aus Butzbach, Hessen
Antworten
-
Hi,
solange die CPU im Haupt-Thread beschäftigt ist, wird die Oberfläche nicht aktualisiert. Das bedeutet, dass erst zum Ende der Berechnungen die Anzeigen aktualisiert werden. Wenn Du die Oberfläche beweglich haben willst, dann musst Du die lang laufenden Berechnungen in einen separaten Thread auslagern. Eine einfache Möglichkeit ist die Nutzung eines BackGroundWorkers.--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 29. Dezember 2017 13:52
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 5. Januar 2018 14:59
-
Hallo
Ich habe eine ganz simple Lösung gefunden. Die GIF-Animatin kommt nicht in eine PictureBox, sondern in ein Label. Das Label wird auf Visible = False gesetzt. In der Function wo soviel im Hintergrund passiert, setze ich das Label ganz am Anfang auf Visible = True, am Ende wieder auf False. Alles was dazwischen passiert, läuft bis auf einige Befehle in einer Schleife. In die Schleife kommt der Befehl Application.DoEvents() und mein Spinner dreht sich endlich.
Gruss bostic
Hobby Programmierer aus Butzbach, Hessen
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 29. Dezember 2017 13:52
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 5. Januar 2018 14:59
Alle Antworten
-
Hi,
solange die CPU im Haupt-Thread beschäftigt ist, wird die Oberfläche nicht aktualisiert. Das bedeutet, dass erst zum Ende der Berechnungen die Anzeigen aktualisiert werden. Wenn Du die Oberfläche beweglich haben willst, dann musst Du die lang laufenden Berechnungen in einen separaten Thread auslagern. Eine einfache Möglichkeit ist die Nutzung eines BackGroundWorkers.--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 29. Dezember 2017 13:52
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 5. Januar 2018 14:59
-
Hallo
Ich habe eine ganz simple Lösung gefunden. Die GIF-Animatin kommt nicht in eine PictureBox, sondern in ein Label. Das Label wird auf Visible = False gesetzt. In der Function wo soviel im Hintergrund passiert, setze ich das Label ganz am Anfang auf Visible = True, am Ende wieder auf False. Alles was dazwischen passiert, läuft bis auf einige Befehle in einer Schleife. In die Schleife kommt der Befehl Application.DoEvents() und mein Spinner dreht sich endlich.
Gruss bostic
Hobby Programmierer aus Butzbach, Hessen
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 29. Dezember 2017 13:52
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 5. Januar 2018 14:59