Laden...

Loading Screen + UserControll in Window laden

Erstellt von King vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.335 Views
K
King Themenstarter:in
27 Beiträge seit 2006
vor 14 Jahren
Loading Screen + UserControll in Window laden

Hi Leute!

Ich hätte folgende Frage:

Ich habe bei meinem Projekt ein UserControl welches mit Daten befüllt wird. Dieses UserControll wird zur laufzeit aufgerufen und ins Window geladen.

Da dieser Ladevorgang jedoch länger dauert (es dauert länger bis wpf das UserControl im Fenster anzeigt) würde ich gerne ein Wartefenster machen z.B.: eine Gif animation ablaufen lassen, oder eine Progressbar machen.
Dieses Wartefenster soll solange laufen bis das andere Fenster fertig geladen ist so dass ich dann einfach das Wartefenster schließen kann und das andere Fenster zur verfügung steht.

Sowei so gut. Mein eigentliches Problem ist jetzt dass wenn ich das Wartefenster aufruffe natürlich das andere Fenster nicht aufbereitet wird wegen dem STA Thread. Somit kann nur ein Fenster aktiv sein. Gibts eine möglichkeit das Problem zu lösen das ich ein anderes Fenster sammt GUI im Hintergurnd aufbauen kann und im Vordergrund was anderes Angezeigt wird so dass der User nicht sehen muss wie langsam das UserControl aufgebaut und ins Window geladen wird??

Vielen Dank für eure Hilfe und für jeden Tipp!

3.430 Beiträge seit 2007
vor 14 Jahren

Hallo King,

so eine Lösung finde ich nicht wirklich gut.
Besser wäre wenn du das Control schnell anzeigst und dann die Daten asynchron nachlädst.
Dann hast du immer noch die Möglichkeit eine Progressbar in deinem Control einzubinden und der User sieht wenigstens schon das Control (wenn auch ohne Daten).

Was für Daten lädst du den?
Evtl wäre es sinnvoll den Ladevorgang in einen Thread oder Backgroundworker auszulagern.

Grüße
Michael

K
King Themenstarter:in
27 Beiträge seit 2006
vor 14 Jahren

Hi michlG!

Danke für den Tipp. Das Problem jest jedoch aber auch schon das das User Controll ansich schon lange braucht ca. 20 sec ohne Daten.

.) Altes UserControll wird rausgeschmissen
.) Neues Controll laden
.) Fenstergröße setzten

das dauert ansich schon lang genung und ist auch grässlich anzusehen. Deswegen würde ich es dem User gerne ersparen sich damit plagen zu müssen und einen Waitingscreen machen.

Daten welche ich lade ist das Laden von Text mit beliegibter font + resizen + decodieren einer Audio Datei.

Da ich auch eine relativ komplexe GUI habe dauert es auch länger.

Eine alternative wäre es das Fenster auszublenden, Waiting Cursor bis das GUI Laden fertig ist und dann die GUI auf aktiv setzten. Bin aber der Meinung das dies nicht die beste Lösung ist weil dich mancher denken wird das Programm hat sich verabschiedet.

Thx für eure Tipps

3.430 Beiträge seit 2007
vor 14 Jahren

Hallo King,

wenn du auch eine komplexe GUI hast sind 20 Sekunden verdammt viel.
Ich habe auch einige ziemlich umfangreiche GUIs und das Programm startet trotzdem relativ schnell 2-3 Sekunden.

Wieso musst du denn das alte UserControl rausschmeissen?
Ein Lösungsweg wäre evtl. das alte nur zu verstecken, dann das Neue anzeigen und das Alte erst disposen wenn das neue schon da ist.
Aber gibt es da einen wirklich triftigen Grund das alte UserControl rauszuschmeissen, evtl wäre da ein TabControl oder whatever angebracht.

Eine alternative wäre es das Fenster auszublenden, Waiting Cursor bis das GUI Laden fertig ist und dann die GUI auf aktiv setzten. Bin aber der Meinung das dies nicht die beste Lösung ist weil dich mancher denken wird das Programm hat sich verabschiedet.

Das ist alles nur ein Gefummel. Und der User haut dann seine Tastatur weil er glaubt dass das Programm abgestürzt ist 😃

Grüsse
Michael

446 Beiträge seit 2004
vor 14 Jahren

Hallo,

auch ich rate dir die Daten asynchron zu laden. So kann auch die komplette Applikation nicht einfrieren. Ein weiteres Fenster öffnen mit einer Statusmeldung über den Ladevorgang würde ich auch verzichten.

Das macht die Sache wesentlich komplizierter als sie ist.
(Im BackgroundWorker WPF Fenster aufrufen = Exception)

Hi michlG!

Das Problem jest jedoch aber auch schon das das User Controll ansich schon lange braucht ca. 20 sec ohne Daten.

Da ich auch eine relativ komplexe GUI habe dauert es auch länger.

Eine alternative wäre es das Fenster auszublenden, Waiting Cursor bis das GUI Laden fertig ist und dann die GUI auf aktiv setzten. Bin aber der Meinung das dies nicht die beste Lösung ist weil dich mancher denken wird das Programm hat sich verabschiedet.

Thx für eure Tipps

Ich würde das UserControl ausblenden, während es aufgebaut wird. Währendessen gibst du ein Loading aus. Erst wenn die Daten zu Verfügung stehen, würde ich das UserControl einblenden. Das kannst du ganz einfach mittels DataTrigger realisieren.

Du überprüfst die ItemsSource (bzw. wie deine Propertie heißt in dem die Daten gespeichert sind) deines UserControls auf {x:Null} und steuerst so die Visibility der UserControls.

Ein Beispiel findest du übrigens hier: http://archiv.get-the-solution.net/index-blog-1-14-69-IsAsync-Meldung-über-Ladevorgang-ausgeben

lg

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

K
King Themenstarter:in
27 Beiträge seit 2006
vor 14 Jahren
Gelöst: Loading Screen + UserControll in Window laden

Hi!

Danke für deinen Tipp. Habe es so gelöst wie von dir geraten.

Mfg King