Maison >développement back-end >C++ >Comment mettre à jour en toute sécurité les éléments de l'interface utilisateur WPF à partir d'un fil de discussion en arrière-plan ?
Mise à jour de l'interface utilisateur WPF thread-safe : évitez le piège du thread d'arrière-plan accédant aux éléments de l'interface utilisateur
Dans les applications WPF, la sécurité des threads doit être assurée lors de la mise à jour des éléments de l'interface utilisateur à partir d'un thread non-UI. Ceci peut être réalisé en appelant l’opération de mise à jour de l’interface utilisateur sur le thread principal.
Dans l'extrait de code suivant, vous essayez de mettre à jour la collection FileSystemWatcher
à partir d'un fil d'arrière-plan déclenché par dataGridRows
. Cependant, cela provoque un crash car la collection dataGridRows
fonctionne sur le thread principal de l'interface utilisateur, tandis que le moniteur de fichiers s'exécute sur un thread séparé.
Pour résoudre ce problème et accéder en toute sécurité aux éléments de l'interface utilisateur à partir d'un fil de discussion en arrière-plan, vous pouvez utiliser Dispatcher.Invoke()
. Cette méthode vous permet d'exécuter le délégué sur le thread principal de l'interface utilisateur, garantissant ainsi que les opérations de l'interface utilisateur sont effectuées de manière synchrone.
Voici comment mettre en œuvre Dispatcher.Invoke()
:
<code class="language-csharp">Application.Current.Dispatcher.Invoke(new Action(() => { dataGridRows.Add(ds); }));</code>
Vous pouvez également utiliser le planificateur pour un élément spécifique de l'interface utilisateur (tel que le DataGrid lui-même) :
<code class="language-csharp">dataGrid.Dispatcher.Invoke(new Action(() => { dataGridRows.Add(ds); }));</code>
En utilisant Dispatcher.Invoke()
, vous vous assurez que les mises à jour de l'interface utilisateur sont effectuées sur le thread principal, évitant ainsi les conditions de concurrence potentielles et les plantages. Cette approche vous permet de manipuler en toute sécurité les éléments de l'interface utilisateur à partir d'un thread d'arrière-plan tout en préservant l'intégrité de votre application WPF.
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!