2017-03-09 2 views
0

Ich habe eine WPF-Anwendung mit PRISM. Ich habe einen Login-Bildschirm und bei erfolgreicher Anmeldung wird eine neue Ansicht mit einer TileListView mit vielen Elementen angezeigt. Das Rendern dauert über 10 Sekunden, da die Steuerung viel berechnen muss usw. All dies verwendet den UI-Thread nach Standardverhalten, da das Rendern in WPF im UI-Thread erfolgt. Ist es möglich, ein WaitControl wie ein Spinner oder nur eine einfache Animation in einem separaten Fenster oder so anzuzeigen? Wenn die Animation zu diesem Zeitpunkt angehalten wird, wird das Steuerelement im UI-Thread gerendert.Wartebildschirm beim Rendern UIElement in WPF

+0

Wäre es möglich, einen Refactoring durchzuführen, sodass UI-Objekte an DependencyProperties gebunden sind, die zugewiesen werden, nachdem Berechnungen in Hintergrundthreads ausgeführt wurden? Scheint so, als könnte es ein Problem sein, dass so viel auf dem UI-Thread passiert. –

+0

Die Steuerung ist von Telerik, also konnte ich nicht ändern:/ –

+0

Ich sehe. Ein Spinner im selben Fenster würde definitiv nicht funktionieren - seine Spinanimation würde auf dem gleichen festgefahrenen UI-Thread stattfinden, also würde es sich nicht gut drehen. Aber vielleicht könnte Ihre Idee, ein anderes Fenster oder etwas zu überlagern, funktionieren. Sie müssen nur wissen, wann das Steuerelement geladen wurde. Können Sie etwas mehr erklären, was die Steuerung berechnet? Das könnte uns helfen, eine andere Lösung zu finden –

Antwort

1

Sie könnten ein neues Fenster erstellen, das in einem separaten Thread startet. In dem folgenden Blogpost finden Sie ein Beispiel wie das getan wird.

ein WPF-Fenster in einem separaten Thread starten:http://reedcopsey.com/2011/11/28/launching-a-wpf-window-in-a-separate-thread-part-1/

Dann einfach Sie diesen Thread starten, um das Fenster zeigt nur, nachdem Sie die Anmeldeinformationen überprüft haben und kurz vor Ihrem schweren Rendering können beginnen.

Dies ist wahrscheinlich das Beste, was Sie tun können, und es sollte auch eine ziemlich einfache Sache zu implementieren sein.

+0

Genau das, was ich brauchte, vielen Dank. –

0

Sie können SplashScreen verwenden, bis der Hintergrundprozess abgeschlossen ist. Siehe hierzu Splash Screen in WPF

+0

Das löst mein Problem nicht, bitte lesen Sie meine Frage. –

Verwandte Themen