2011-03-14 1 views
0

J'ai une application C#/WPF qui va effectuer beaucoup d'actions, y compris les modifications de l'interface utilisateur (il charge une macro), mais je veux avoir une fenêtre modale avec quelque chose bougeant disant d'attendre. Le travail de macro de chargement doit être effectué dans le thread d'application principal, mais comment imprimer la fenêtre modale car elle doit être non bloquée par le chargement de la macro mais dans le thread d'application car il s'agit d'une interface utilisateur.Travail en arrière-plan qui effectue la modification de l'interface utilisateur et le dialogue modal

Actuellement, je mets le LoadMacro dans un BackgroundWorker dans un Application.Current.Dispatcher.Invoke en affichant ma boîte de dialogue en attente. Mais ce n'est pas satisfaisant parce que les deux se battent pour mettre à jour l'interface utilisateur.

Alors, comment faire?

Répondre

4

Vous n'avez pas besoin d'exécuter le worker d'arrière-plan à partir de n'importe quel répartiteur.

Chargez votre fenêtre modale, puis démarrez le travailleur d'arrière-plan qui s'est abonné à son événement ProgressChanged. Vous pouvez ensuite ReportProgress sur le travailleur d'arrière-plan en passant tout ce que vous voulez pour mettre à jour la fenêtre du modèle dans la propriété UserState.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.progresschanged.aspx

Questions connexes