Maison >développement back-end >C++ >Comment puis-je mettre à jour en toute sécurité une interface utilisateur WPF à partir d'un fil de discussion en arrière-plan ?
Mises à jour de l'interface utilisateur WPF Thread-Safe : un guide pratique
Les applications WPF nécessitent une gestion minutieuse des mises à jour de l'interface utilisateur à partir des threads d'arrière-plan. L'accès direct aux éléments de l'interface utilisateur à partir d'un thread d'arrière-plan n'est pas sécurisé et peut provoquer une instabilité ou des plantages de l'application. En effet, les éléments de l'interface utilisateur sont intrinsèquement liés au thread principal de l'application.
Considérons un scénario dans lequel un observateur du système de fichiers met à jour une grille de données avec des entrées de fichier journal. Tenter d'ajouter une nouvelle ligne directement (par exemple, dataGridRows.Add(ds)
) dans le gestionnaire d'événements de l'observateur sur un fil d'arrière-plan est incorrect.
La solution réside dans l'utilisation de la classe Dispatcher
. Le Dispatcher
fournit un mécanisme pour organiser l'exécution du code vers le thread principal, garantissant ainsi la sécurité des threads. La méthode Dispatcher.Invoke
est essentielle ici.
Voici comment modifier le gestionnaire d'événements watcher_Changed
pour mettre à jour la grille de données en toute sécurité :
<code class="language-csharp">private void watcher_Changed(object sender, FileSystemEventArgs e) { if (File.Exists(syslogPath)) { string line = GetLine(syslogPath, currentLine); foreach (CommRuleParser crp in crpList) { FunctionType ft = new FunctionType(); if (crp.ParseLine(line, out ft)) { Application.Current.Dispatcher.Invoke(() => DGAddRow(crp.Protocol, ft)); } } currentLine++; } else { MessageBox.Show(UIConstant.COMM_SYSLOG_NON_EXIST_WARNING); } }</code>
En utilisant Application.Current.Dispatcher.Invoke
, la méthode DGAddRow
est exécutée sur le thread principal. Cela garantit un accès sécurisé à la grille de données et évite les conflits de threads. Cette approche garantit que toutes les mises à jour de l'interface utilisateur sont traitées correctement et évite les plantages potentiels ou les comportements imprévisibles.
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!