Ist es möglich Views innerhalb einer GUI asynchron zu laden?
In meinem Scenario sieht das wie folgt aus. Ich habe in einem ListView MenuItems, die je eine View in einem ContentControl laden. Nun habe ich das Problem, einige der Views die ich anzeigen möchte, laden Daten aus einer XML und zeigen diese in einem Infragistic DataPresenter an.
Beides ist nicht das schnellste, sowohl der DataPresenter, als auch das Laden der Daten aus einer XML.
Mein Vorstellung geht dahin, dass ich beim Klick auf das MenuItem, ein Loading anzeige und dieses nach Fertigladen der entsprechenden View, das Loading wieder ausblenden.
Das Loading habe ich:
<controls:IsBusyPanel Name="busy" />
und würde über die Visibility-Eigenschaft das Ding dann ein- und ausblenden.
Da ich wohl aber nur ein GUI Thread habe, weiß ich nicht wie ich beides voneinander trennen kann.
Ich hatte so ähnliche Probleme, nur das es bei mir darum ging, über MAF GUI-AddIns (in extra AppDomains) zu laden. Dabei ist der GUI-Thread immer Amok gelaufen, egal wie ich mein Wissen über Threading/Dispatcher eingesetzt habe.
Hab es schon aufgeben wollen, da ich einerseits eine animierte Lade-Anzeige haben wollte und natürlich das die Oberfläche nicht gesperrt wird.
Durch Zufall bin ich dann darauf gekommen, die ganze Geschichte über ein extra Windows auszulagern, da ein neues Windows immer einen eigenen GUI-Thread hat. Nachdem ich weiter recherchiert habe, hab ich folgende Lösung gefunden, die bei mir nun super funktioniert.
Controls können nur in dem Thread erstellt indem auch der Dispatcher erzeugt wurde - kurz: nur im UI-Thread, sonst kracht es.
Möglich ist somit nur dass die Daten async. geladen werden und dann im UI-Thread weiterverarbeitet werden. Du kannst aber mit dem Dispatcher "Hintergrundaktionen" durchführen lassen und alles läuft im UI-Thread. Siehe Threading Model.