Gui wird nicht aktualisiert
Hallo Zusammen
Ich habe in meiner App eine Auswahlliste. Wenn in dieser Liste etwas gewählt wird sollen die entsprechenden Daten geladen werden. Damit der User hier etwas sieht, würde ich gerne einen Busy Indicator anzeigen lassen. Diesen aktiviere ich mit folgendem Code:
Code:
Dispatcher.BeginInvoke(delegate
{
busyProceedAction.IsRunning = true;
});
Jedoch wird das Gui erst aktualisiert nachdem alle Daten geladen wurden, obwohl Das Daten laden erst nachher angestossen wird. Ich vermute dass das Gui bereits durch das Klick Event blockiert ist.
Gibt es eine Möglichkeit wie ich das Gui vor dem Start der Datenbankabfrage aktualisieren kann?
Danke und Gruss
Nemoc
AW: Gui wird nicht aktualisiert
Ich denke, async sollte helfen, oder ein background worker
Mit der kostenlosen
PocketPC.ch App von meinem RM-821_eu_euro2_248 aus geschrieben.
AW: Gui wird nicht aktualisiert
Mit BeginInvoke sollte es doch async sein, oder irre ich mich?
---------- Hinzugefügt um 23:40 ---------- Vorheriger Beitrag war um 23:27 ----------
Ich habe noch etwas weiter rumgesucht und eine Lösung gefunden die ich Adaptieren konnte. Dabei erstelle ich zwei Actions. Eine zum Laden der Daten und eine zum Anzeigen des Busy Indicators. Die erste zum Anzeigen des Indikators rufe ich in einem neuen Thread auf und die zweite per Dispatcher:
Code:
Action loadAction = () =>
{
LoadLocations(ListboxCities.SelectedItem.ToString());
};
Action actionBusyIndicator = () => Dispatcher.BeginInvoke(delegate
{
busyProceedAction.IsRunning = true;
});
await Task.Factory.StartNew(actionBusyIndicator);
Dispatcher.BeginInvoke(loadAction);
AW: Gui wird nicht aktualisiert
Da war ich mit Async/Await ja doch nicht weit weg. ;)
AW: Gui wird nicht aktualisiert
Genau =)
Wobei ich mich immernoch etwas wundere dass BeginInvoke nicht async ist. Dachte das auch schon gelesen zu haben. Aber gut, wenn man es weiss..
AW: Gui wird nicht aktualisiert
Also wenn ich das jetzt richtig lese, dann hast du zwar das Umstellen des Busy-Indicators Async gemacht aber dann das Laden synchron angestossen und es war ja das Laden, dass den UI-Thread blockiert hat. Ich stelle mal in den Raum dass du die Umstellung des Busy-Indicators auch einfach synchron machen könntest (das geht ja schnell) und die Animation läuft dann im UI-Thread. Nur das Laden der Daten muss halt Async sein, da sonst in der Zwischenzeit das UI geblockt wird. Oder interpretiere ich deinen ursprünglichen Code da gerade falsch.
AW: Gui wird nicht aktualisiert
Das wäre mehr oder weniger das umgekehrte was ich jetzt gemacht habe. Bei mir ist das setzten des Busy Indicator async und das laden sync. Aber deine Variante wäre allenfalls etwas sinnvoller ^^ ich versuch das heute Abend mal noch aus ob das auch klappt =)
AW: Gui wird nicht aktualisiert
Ich habe das ei Gelegenheit mal noch probiert, hat aber auf dem umgekehrten Weg nicht geklappt.
Mit der kostenlosen
PocketPC.ch App von meinem Windows 8 device aus geschrieben.