Maison > développement back-end > C++ > Comment mettre à jour une interface utilisateur WPF à partir d'un thread distinct dans une classe différente ?

Comment mettre à jour une interface utilisateur WPF à partir d'un thread distinct dans une classe différente ?

DDD
Libérer: 2025-01-05 18:57:43
original
440 Les gens l'ont consulté

How to Update a WPF UI from a Separate Thread in a Different Class?

Mise à jour de l'interface utilisateur à partir d'un thread distinct dans une classe différente

Q : Comment mettre à jour une interface utilisateur WPF à partir d'un thread de travail exécuté dans une classe distincte ?

A : Pour mettre à jour l'interface utilisateur à partir d'un autre thread :

  1. Utilisez Dispatcher.Invoke : Appelez cette méthode dans la classe de travail pour mettre à jour les éléments de l'interface utilisateur sur le thread principal.
  2. Communication basée sur les événements :

    • Créer des événements dans la classe des travailleurs pour déclencher des notifications d'interface utilisateur mises à jour.
    • Enregistrez les gestionnaires de ces événements dans la classe de la fenêtre principale.
    • Distribuez les mises à jour de l'interface utilisateur dans les gestionnaires d'événements.

Exemple d'utilisation d'événements :

// Main window class
private void startCalc(object sender, RoutedEventArgs e)
{
    // Create a new worker class instance
    CalcClass calc = new CalcClass();
    
    // Register event handler to receive UI update notifications
    calc.ProgressUpdate += (s, e) =>
    {
        Dispatcher.Invoke((Action)(() => { /* Update UI here */ }));
    };
    
    // Start the worker thread
    Thread calcThread = new Thread(new ParameterizedThreadStart(calc.TestMethod));
    calcThread.Start(input);
}

// Worker class
public class CalcClass
{
    public event EventHandler ProgressUpdate;

    public void TestMethod(object input)
    {
        // Perform calculations
        
        // Raise event to notify UI update
        if (ProgressUpdate != null)
            ProgressUpdate(this, new EventArgs());
    }
}
Copier après la connexion

Supplémentaire Remarque :

Solution alternative utilisant Task :
Dans .NET 4.5 et versions ultérieures, vous pouvez également utiliser la programmation asynchrone avec Task pour mettre à jour l'interface utilisateur de manière plus propre et plus efficace. manière.

Code mis à jour à l'aide de la tâche :

// Main window class
private async void buttonDoCalc_Clicked(object sender, EventArgs e)
{
    // Create a new worker class instance
    CalcClass calc = new CalcClass();
    
    // Start the asynchronous calculation
    await calc.CalcAsync();
}

// Worker class
public class CalcClass
{
    public async Task CalcAsync()
    {
        // Perform calculations
        
        // Update UI using Dispatcher.Invoke
        Dispatcher.Invoke((Action)(() => { /* Update UI here */ }));
    }
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal