Maison >développement back-end >C++ >Comment mettre à jour en toute sécurité une interface utilisateur WPF à partir d'un fil d'arrière-plan dans une classe distincte ?
Dans une application WPF, vous souhaitez mettre à jour des éléments de l'interface utilisateur (par ex. , barre de progression, bloc de texte) lors de longs calculs exécutés dans un thread d'arrière-plan appartenant à une classe différente. Cependant, vous ne savez pas comment relever ce défi, car les méthodes traditionnelles se sont révélées inefficaces.
La solution la plus efficace consiste à utiliser des événements et des répartiteurs. Voici comment procéder :
Déclaration d'événement dans la classe de calcul :
Dans la classe responsable des calculs (par ex. , calcClass), déclarer un événement pour informer l'interface utilisateur de la progression mises à jour :
public event EventHandler<EventArgs<YourStatus>> ProgressUpdate;
Inscription à l'événement dans la classe principale :
Dans la classe principale Classe d'interface utilisateur (par exemple, MainWindow), inscrivez-vous à ProgressUpdate event :
calcClass.ProgressUpdate += (s, e) => { Dispatcher.Invoke((Action)delegate() { /* Update UI */ }); };
Déclenchement d'événements dans la classe de calcul :
Dans le calcul méthode, déclenchez l'événement ProgressUpdate si nécessaire :
//part 1 if(ProgressUpdate != null) ProgressUpdate(this, new YourStatus(status)); //part 2
Bien que les événements et les répartiteurs soient généralement préférés, vous pouvez vous pouvez également utiliser un composant BackgroundWorker :
Création de Worker et Gestion des événements dans la classe principale :
var worker = new BackgroundWorker(); worker.DoWork += (s, e) => { /* Perform calculations */ }; worker.ProgressChanged += (s, e) => { /* Update UI with progress */ }; worker.RunWorkerCompleted += (s, e) => { /* Finalize UI updates */ };
Démarrage des calculs en arrière-plan dans la classe de calcul :
worker.RunWorkerAsync(input);
N'oubliez pas que l'utilisation d'événements et de répartiteurs offre plus de contrôle et de flexibilité par rapport à BackgroundWorker.
En appliquant ces techniques, vous pouvez mettre à jour efficacement les éléments de l'interface utilisateur à partir des fils de discussion en arrière-plan, garantissant ainsi une réactivité et une interaction utilisateur transparente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!