2017-03-09 1 views
0

J'ai une application WPF utilisant PRISM. J'ai un écran de connexion et sur la connexion réussie dans une nouvelle vue contenant un TileListView avec de nombreux éléments apparaît. Cela nécessite plus de 10 secondes de rendu car le contrôle doit calculer beaucoup, etc. Tout ceci utilise le thread UI par le comportement standard, car le rendu dans WPF est fait dans le thread UI. Est-il possible d'afficher un WaitControl comme un spinner ou juste une animation simple dans une fenêtre séparée ou quelque chose comme ça? Maintenant à l'animation s'arrête à ce moment, le contrôle est rendu dans le thread UI.Ecran d'attente pendant le rendu UIElement dans WPF

+0

Serait-il possible de refactoriser afin que les choses de l'interface utilisateur soient liées à DependencyProperties qui sont assignées après l'exécution des calculs dans les threads d'arrière-plan? On dirait que cela pourrait être un problème qui se passe tellement sur le thread UI –

+0

Le contrôle est de Telerik donc je ne pouvais pas modifier:/ –

+0

Je vois. Un spinner dans la même fenêtre ne fonctionnerait certainement pas - son animation de spin se produirait sur le même thread de l'interface utilisateur, donc il ne tournerait pas bien. Mais peut-être votre idée de créer une autre fenêtre ou quelque chose à superposer pourrait fonctionner. Vous devez juste savoir quand le contrôle a fini de charger. Pourriez-vous expliquer un peu plus ce que le contrôle calcule? Cela pourrait nous aider à identifier une autre solution –

Répondre

1

Vous pouvez créer une nouvelle fenêtre qui se lance dans un fil séparé. Reportez-vous à l'article de blog suivant pour un exemple de la façon de procéder.

Lancement d'une fenêtre WPF dans un thread séparé:http://reedcopsey.com/2011/11/28/launching-a-wpf-window-in-a-separate-thread-part-1/

Ensuite, vous venez de commencer ce fil qui affiche la fenêtre juste après avoir validé les informations d'identification et juste avant le rendu lourd est sur le point de commencer.

Ceci est probablement la meilleure chose que vous pouvez faire et ce devrait aussi être une chose assez facile à mettre en œuvre.

+0

Exactement ce dont j'avais besoin, merci beaucoup. –

0

Vous pouvez utiliser SplashScreen pour afficher jusqu'à ce que le processus d'arrière-plan soit terminé. Référez-vous Splash Screen in WPF

+0

Cela ne résout pas mon problème, s'il vous plaît lire ma question. –