www.rolandk.de
- Aktuelle Themen zu .Net -
Achtung: Hier handelt es sich um meine alte Seite.
Die aktuelle ist unter folgendem Link erreichbar: www.rolandk.de/wp/
Home Blog Ladevorgänge anzeigen




















































Ladevorgänge anzeigen
Sonntag, den 17. Juli 2011 um 09:12 Uhr

Längere Ladezeiten in Desktop-Anwendungen sind eine Sache für sich. Der Benutzer will sehen, dass sich etwas tut bzw. dass das Programm arbeitet. Aber: Ist das auch bei den meisten Programmen der Fall? Meist ist es so, dass nach einem Click auf einem Button - sagen wir einen Lade-Button - die Anwendung solange steht, bis die Datei geladen ist und dem Benutzer präsentiert wird. Was bekommt der Benutzer davon mit? Tja, während dieser Ladezeit reagiert halt die Anwendung nicht. Schlecht, das ist klar, aber wie macht man das als Entwickler besser?

 

Auf diese einfache Frage gibt es viele Antworten. Man kann

  • dem Benutzer schrittweise mit Zwischenergebnissen versorgen (z. B. Seitenaufbau bei Webbrowsern),
  • den Ladevorgang in einen Hintergrund-Thread verlagern und den Benutzer erst einmal weiterarbeiten lassen,
  • einen Fortschrittsbalken anzeigen, den der Benutzer auch abbrechen kann, falls es zu lange dauert,
  • ...

In diesem kleinen Beitrag will ich meine Lösung für einen generischen Fortschritts-Dialog präsentieren. Die Idee ist relativ einfach: Ein Dialog, der ähnlich einfach wie die MessageBox von Windows.Forms bzw. WPF funktioniert - praktisch also keinen wirklichen Zusatzaufwand bei der Implementierung benötigt. In der Sprache C# ausgedrückt würde das so aussehen:

  1. /// <summary>
  2. /// Trigger load process from gui.
  3. /// </summary>
  4. public static void LoadSomething()
  5. {
  6. ProgressDialog.Show(() => LoadSomethingBackgroundLogic());
  7. }
  8.  
  9. /// <summary>
  10. /// Perform loading logic.
  11. /// </summary>
  12. private static void LoadSomethingBackgroundLogic()
  13. {
  14. //..
  15. }

Im Prinzip geht es also um eine Klasse ProgressDialog, die ähnlich der Standard MessageBox eine statische Methode Show zur Verfügung stellt. Dabei gibt es verschiedene Überladungen, hier in Beispiel wird die denkbar einfachste verwendet. Es wird über einen Lambda Ausdruck eine Logik definiert, die im Hintergrund ausgeführt werden soll. der ProgressDialog selbst wird solange angezeigt, bis der Lambda-Ausdruck abgearbeitet ist. Der Dialog ist modal, das heißt, mit der Anwendung selbst kann der Benutzer nicht weiterarbeiten, solange der Ladevorgang läuft. Aber: Die Anwendung bleibt nicht hängen. Der Lade-Dialog reagiert nach wie vor normal auf Benutzerangaben und zeigt auch den aktuellen Fortschritt an. Gegebenenfalls kann auch eine Cancel-Funktion oder ein Timeout eingebaut werden. Meine Implementierung dieses Dialogs sieht jetzt so aus:

 

 

Eine Kleinigkeit gibt es dabei aber zu beachten: Der Ladevorgang wird damit in einen anderen Thread verlagert. Als Entwickler muss man also aufpassen, dass dadurch keine Synchronisierungsprobleme oder Ähnliches entstehen.

 

Kommentar hinzufügen

Ihr Name:
Kommentar: