Maison >développement back-end >C++ >Comment mettre à jour en toute sécurité une ObservableCollection à partir d'un thread de travail dans .NET ?

Comment mettre à jour en toute sécurité une ObservableCollection à partir d'un thread de travail dans .NET ?

DDD
DDDoriginal
2025-01-26 22:31:08905parcourir

How to Safely Update an ObservableCollection from a Worker Thread in .NET?

Mise à jour ObservableCollection à partir des fils de discussion en arrière-plan dans .NET

Le défi

Modifier directement un ObservableCollection à partir d'un thread de travail dans .NET conduit souvent à des exceptions. C'est parce que ObservableCollection n'est pas thread-safe ; plusieurs threads y accédant simultanément peuvent provoquer un comportement imprévisible.

Solution pour .NET 4.5 et versions ultérieures

.NET 4.5 et les versions ultérieures offrent une solution pratique utilisant BindingOperations.EnableCollectionSynchronization. Cette méthode simplifie la synchronisation des threads pour les mises à jour de l'interface utilisateur :

BindingOperations.EnableCollectionSynchronization(myCollection);

Cette seule ligne réalise :

  • Association de thread : relie le ObservableCollection ( myCollection ) au thread de l'interface utilisateur, garantissant que les événements CollectionChanged sont traités sur le thread de l'interface utilisateur.
  • Synchronisation : Implémente le verrouillage pendant la gestion des événements, évitant ainsi les conflits entre les modifications du thread d'arrière-plan et l'accès au thread de l'interface utilisateur.

Maintenir la sécurité des fils

Bien que BindingOperations.EnableCollectionSynchronization gère la synchronisation des threads de l'interface utilisateur, rappelez-vous que ObservableCollection reste intrinsèquement non thread-safe. Pour une sécurité robuste des threads, utilisez toujours un verrou lorsque vous modifiez directement la collection à partir des threads d'arrière-plan :

<code class="language-csharp">lock (myCollection)
{
    // Modify myCollection here (e.g., Add, Remove, etc.)
}</code>

En combinant BindingOperations.EnableCollectionSynchronization avec un verrouillage approprié, vous pouvez mettre à jour votre ObservableCollection de manière sûre et efficace à partir des threads de travail sans compromettre l'intégrité des threads de l'interface utilisateur.

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