C#: Ablauf nacheinander, Datenladen

Hi.

Ich arbeite mit xaml/cs-Dateien.

Auf der Oberfläche habe ich einen Button, mit dem man Daten lädt, was einige Sekunden dauert.
Nun möchte ich folgenden logischen Ablauf haben:

  • Button wird gedrückt
  • auf der Oberfläche kommt ein Hinweis „Loading“ (z.B. in einem Label)
  • die Daten werden vollständig geladen
  • der Hinweis verschwindet

Also in etwa:

private void btnDo_Click(object sender, RoutedEventArgs e)
{
labelHinweis.Content = „Loading“;
labelHinweis.Visibility = Visibility.Visible;
loadMyData();
labelHinweis.Visibility = Visibility.Collapsed;
}

Jedoch erscheint das Label nicht.
Es käme erst nach (!) dem Laden (wenn ich zum Testen die letzte Zeile weglassen würde).

Wie macht man es, damit das passiert, was ich haben möchte?

Danke!
M.

Hilft labelHinweis.Refresh?

Alles was Du in Ereignisbehandlungsroutinen implementierst, findet auch im UI-Thread statt. Das Laden der Daten blockiert dadurch, dass die Ereignisbehandlungsroutine ausgeführt wird, die Aktualisierung der UI.

Du implementierst WPF, da ist CodeBehind immer schlecht. Schau Dir mal das MVVM-Pattern an. Unabhängig davon wirst Du das Daten der Laden asynchron ausgestalten müssen. Auch hier gibt es verschiedenste Entwurfsmuster, angefangen von Kanonen wie ReactiveExtensions über die Task Parallels Library, die Verwendung von Threads oder oder oder.

Aktualisierungen aus anderen Threads heraus, die auf die UI zugreifen, müssen mit dieser wieder synchronisiert werden (Dispatcher.Invoke).

Mit Hilfe von Google sollten Dir die aufgeführten Ansätze einiges an Lesestoff und Problemlösungen bieten können.

Viel Spaß.