Maison > développement back-end > C++ > Comment puis-je mettre à jour en toute sécurité les éléments de l'interface utilisateur WPF à partir d'un fil de discussion en arrière-plan ?

Comment puis-je mettre à jour en toute sécurité les éléments de l'interface utilisateur WPF à partir d'un fil de discussion en arrière-plan ?

Susan Sarandon
Libérer: 2025-01-11 21:11:42
original
688 Les gens l'ont consulté

How Can I Safely Update WPF UI Elements from a Background Thread?

Accès sécurisé au fil de discussion de l'interface utilisateur (principal) dans WPF

Dans les applications WPF, l'interaction avec le thread d'interface utilisateur à partir d'un thread non-UI (comme un thread d'arrière-plan) peut provoquer des exceptions et des plantages. En effet, le thread de l'interface utilisateur dispose d'un planificateur qui gère les mises à jour de l'interface utilisateur et garantit la sécurité des threads.

Question :

Considérez le code suivant, qui met à jour un DataGrid lorsqu'un fichier journal est modifié :

<code class="language-c#">private void watcher_Changed(object sender, FileSystemEventArgs e)
{
    if (File.Exists(syslogPath))
    {
        ...
        DGAddRow(crp.Protocol, ft);
    }
}</code>
Copier après la connexion

La méthode DGAddRow ajoute une nouvelle ligne au DataGrid, ce qui doit être fait sur le thread de l'interface utilisateur. Cependant, étant donné que watcher_Changed s'exécute sur un thread d'arrière-plan, il tente de modifier directement l'interface utilisateur, provoquant une exception.

Solution :

Pour accéder en toute sécurité au fil de discussion de l'interface utilisateur, utilisez la méthode Dispatcher.Invoke d'Application ou n'importe quel UIElement. Cette méthode vous permet d'exécuter du code sur le thread de l'interface utilisateur.

<code class="language-c#">Application.Current.Dispatcher.Invoke(new Action(() => {
    DGAddRow(crp.Protocol, ft);
}));</code>
Copier après la connexion

En utilisant Dispatcher.Invoke, le code qui met à jour l'interface utilisateur sera exécuté sur le thread principal, évitant ainsi d'éventuels problèmes de thread.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal