


Comment mettre à jour en toute sécurité une interface utilisateur WPF à partir d'un fil d'arrière-plan distinct ?
Jan 06, 2025 am 02:51 AMComment mettre à jour l'interface utilisateur à partir d'un autre thread exécuté dans une autre classe
Énoncé du problème :
Dans un WPF multithread application, il est nécessaire de mettre à jour l’interface utilisateur à partir d’un thread d’arrière-plan exécuté dans une classe distincte. L'objectif est de garder l'interface utilisateur réactive pendant que de longs calculs sont effectués.
Solution utilisant la répartition d'événements :
- Répartition à partir du fil de discussion en arrière-plan : Dans le thread d'arrière-plan, utilisez Dispatcher.Invoke pour exécuter un délégué sur le thread de l'interface utilisateur. Cette approche vous permet d'effectuer des mises à jour de l'interface utilisateur directement à partir de l'autre fil de discussion.
- Gérer la répartition dans la classe UI : Enregistrez un gestionnaire d'événements dans la classe UI pour recevoir la demande de mise à jour de l'interface utilisateur. Dans le gestionnaire d'événements, utilisez l'action Invoquer pour mettre à jour l'interface utilisateur.
Exemple de code :
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void startCalc(object sender, RoutedEventArgs e) { inputValues input = new inputValues(); calcClass calculations = new calcClass(); try { // Parse user inputs } catch { // Handle input errors } // Register event handler calculations.ProgressUpdate += OnProgressUpdate; // Start background calculations Thread calcthread = new Thread( new ParameterizedThreadStart(calculations.testMethod)); calcthread.Start(input); } private void OnProgressUpdate(object sender, YourEventArgs args) { Dispatcher.Invoke((Action)delegate() { // Update UI based on event arguments }); } } public class calcClass { public event EventHandler<YourEventArgs> ProgressUpdate; public void testmethod(inputValues input) { for (int i = 0; i < 1000; i++) { // Perform calculations // Raise ProgressUpdate event when needed if (ProgressUpdate != null) ProgressUpdate(this, new YourEventArgs(status)); Thread.Sleep(10); } } }
Avantages de la répartition des événements :
- Simple à mettre en œuvre
- Permet un contrôle précis sur l'interface utilisateur mises à jour
- Maintient une séparation nette entre le code UI et non-UI
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Gulc: Cibliothèque C construite à partir de zéro

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Utilisation distincte et partage de phrases

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?
