Maison >développement back-end >C++ >Comment puis-je mettre à jour en toute sécurité les contrôles WPF à partir d'un thread non-UI ?

Comment puis-je mettre à jour en toute sécurité les contrôles WPF à partir d'un thread non-UI ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-17 14:11:09131parcourir

How Can I Safely Update WPF Controls from a Non-UI Thread?

Threading WPF : mise à jour en toute sécurité des contrôles à partir des threads d'arrière-plan

La nature monothread de WPF nécessite une gestion minutieuse des mises à jour de l'interface utilisateur à partir des threads non principaux. La classe Dispatcher fournit la solution.

Exploiter la méthode Dispatcher.Invoke

Dispatcher.Invoke permet l'exécution d'un délégué sur le thread principal de l'interface utilisateur, crucial pour accéder et modifier en toute sécurité les contrôles WPF à partir des threads d'arrière-plan.

Étapes de mise en œuvre :

  1. Lancez un fil de discussion en arrière-plan pour la récupération des données.
  2. Dans le fil d'arrière-plan, utilisez Dispatcher.Invoke pour exécuter un délégué responsable des mises à jour de l'interface utilisateur.
  3. Fournissez un délégué Action ou Func comme argument à Dispatcher.Invoke.

Exemple illustratif :

<code class="language-csharp">// Launch a background thread for data fetching
Thread dataThread = new Thread(RetrieveData);
dataThread.Start();

// Background thread function
private void RetrieveData()
{
    // ... Data retrieval from a web server ...

    // Update the UI via Dispatcher.Invoke
    Application.Current.Dispatcher.Invoke(() =>
    {
        // Update WPF controls with the fetched data
    });
}</code>

Remarque importante :

Évitez d'exécuter des opérations longues dans Dispatcher.Invoke pour éviter le gel de l'interface utilisateur. Pour les tâches qui prennent du temps, utilisez plutôt un BackgroundWorker.

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:
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