Fenêtre d’attente WPF

Lorsque je veux exécuter l’opération longue, je veux afficher la fenêtre de dialog du modèle (fenêtre d’attente)

Je souhaite afficher cette fenêtre d’attente dans différents threads sous la forme ShowDialog ()

Avant d’entrer en mode de fonctionnement long, je vais afficher la fenêtre de dialog de modèle

Après avoir terminé l’opération longue, je ferme cette fenêtre de dialog de modèle.

Je sais qu’au lieu de créer Window dans un autre thread, nous pouvons simplement déplacer un long code en cours d’exécution dans un autre thread, mais l’impact de ceci sur mon code est lourd.

Suggérez-moi une solution pour cela

Je vous suggère d’éviter les solutions WinForms-odor, telles que les appels ShowDialog() . Jetez un coup d’oeil au WPF ToolKit BusyIndicator prêt à l’ emploi, qui permet de tirer parti de la puissance et de la flexibilité de WPF et XAML.

BusyIndicator facilite l’information de l’utilisateur quand une application est occupée. Enroulez simplement le contenu pertinent dans une instance du contrôle BusyIndicator et basculez sa propriété IsBusy sur True au cours de tout processus de longue durée .

Il permet de créer des fenêtres d’attente personnalisées, par exemple:

entrez la description de l'image ici

Vous avez le plein contrôle de la disposition de l’interface utilisateur et pouvez définir votre propre DataTemplate:

    .... 

Voir Extended WPF Toolkit BusyIndicator pour plus d’exemples et pour télécharger.

Tout d’abord, mon conseil est de supprimer la “longue opération en cours” du thread d’interface utilisateur.

Cela étant dit, voici un article décrivant ce que vous essayez de faire.

http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/

Le code suivant est présenté:

 Thread thread = new Thread(() => { Window1 w = new Window1(); w.Show(); w.Closed += (sender2, e2) => w.Dispatcher.InvokeShutdown(); System.Windows.Threading.Dispatcher.Run(); }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); 

Vous créez un nouveau Dispatcher qui gérera les messages et les événements de l’interface utilisateur sur le nouveau thread. Le gestionnaire d’événements fermé attaché garantit que le répartiteur créé ne continue pas à s’exécuter après la fermeture de votre formulaire, empêchant ainsi l’application de s’exécuter “pour toujours”.

Merci de fournir des solutions.

En fait, j’utilise le framework .Net 3.5, c’est pourquoi je ne peux pas utiliser l’indicateur Occupé.

Ce que j’ai fait est: Conformément à la première solution, j’ai créé un travailleur en arrière-plan pour un processus de longue durée et utilisé ShowDialog () pour une fenêtre d’attente.

Merci à vous tous pour m’avoir fourni les moyens possibles d’atteindre mon objective

Milind