"Bitte warten" Form wird nicht fertig geladen

Alexander_87

Mitglied
Hi,

ich schreibe gerade ein Tool, welche verschiedene Daten von einer Maschine läd. Die meisten davon sind relativ klein und sind schnell übertragen, so dass der User nicht lang auf das Programm warten muss. Aber teilweise sind eben doch auch längere Ladezeiten zu erwarten und dass ein Nutzer nicht denkt, dass sich das Programm zerschossen hat, möchte ich ein "Bitte warten, Daten werden übertragen..." PopUp anzeigen lassen, welches sich automatisch schließt, wenn die Kommunikation beendet ist.

Ich habe hierfür eine zweite Form in meinem Projekt angelegt. Lasse diese aber immer versteckt und sobald ausgelesen wird, soll mir die Lade-Form angezeigt werden.

Wird soweit auch gemacht, jedoch wird diese icht richtig angezeigt (siehe Bild).

Die Frage, wie kann ich ein Programm solange blocken, bis das Popup vollständig geladen ist?

Gruß Alex
 

Anhänge

  • PopUp.JPG
    PopUp.JPG
    6,8 KB · Aufrufe: 44
Wie zeigst du die Form an? Mit der Show- oder der ShowDialog-Methode?
Da die Form weiß bleibt, vermute ich, dass dein Programm beim Übertragen sehr aktiv ist und deshalb der Form keine Zeit gibt, sich zu zeichnen.
Ein
Code:
Application.DoEvents
könnte das Problem eventuell beheben. Mit "DoEvents" erlaubst du deinem Programm, andere Nachrichtenschlangen abzuarbeiten, bevor weiterer Code ausgeführt wird.
 
Du könntest die Daten auch über einen Hintergrund Thread laden.
Am einfachsten gehts dabei mit dem BackgroundWorker.
 
Danke für die schnellen Antworten :)

Mit DoEvents klappt alles genau so wie ich es mir vorgestellt habe

@Spyke ich denke ein BackgroundWorker wäre hier nicht richtig, da die Form während der Übertragung gesperrt sein sollte. Das Programm ist letztendlich nur zum Sichern und wieder Aufspielen von Daten zuständig und während der Übertragung muss nichts bearbeitet werden...
 
Ich würde trotzdem zum Background Worker raten, die Form kann man auch anders sperren (Enabled = false?), bis der Worker fertig ist. Application.DoEvents() sollte man eigentlich nicht verwenden.
Ohne Thread kann es dir auch passieren, dass sich die Form zwar lädt, aber wenn du sie z.b. verschiebst oder ein anderes Programm fokusierst und dann wieder zurück wechselst, dass alles weiß bleibt und nicht neu gezeichnet wird.
gruß
Ringelsocke
 
Application.DoEvents ermöglicht ja gerade das Verschieben/Neuzeichnen trotz rechenintensivem Code. Warum DoEvents nicht verwenden? Wozu existiert es dann?
 

Neue Beiträge

Zurück