2009-08-19 7 views
0

Lorsque je liez un BindingList<ProcessDataItem> à un ComboBox un InvalidOperationException est renvoyé indiquant que la collection qui est énumérée a changé. Les instances de ProcessDataItem reçoivent en permanence des mises à jour lorsque la valeur de mesure correspondante a changé. La classe implémente INotifyPropertyChanged pour notifier son conteneur de ces modifications. Cela semble causer le problème. Je suis surpris d'avoir ce problème car la collection reste intacte. Rien n'est ajouté ou supprimé. Seules les valeurs changent. Comment puis-je réparer cela?Problème de liaison de données avec la classe qui est mise à jour de manière asynchrone

Edit: La documentation de l'événement BindingList.ListChanged dit:

Se produit lorsque la liste ou un élément dans la liste change.

Cela semble causer mon problème. Devrai-je créer une propre classe de conteneur qui supprime les événements de modification de valeur alors qu'une énumération est en cours?

+1

L'autre problème à se poser est que ces événements de modification proviennent probablement de votre thread d'arrière-plan, mais qu'ils sont consommés par un contrôle graphique et interagissent avec un contrôle graphique uniquement sur le thread graphique. En tant que tel, tout objet qui déclenche des événements qui sont consommés par l'interface graphique ne doit être modifié que sur le thread graphique. –

Répondre

0

J'ai finalement dû résoudre le problème de synchronisation dans la classe ProcessDataItem et non au niveau du conteneur. Maintenant l'événement BindingList.ListChanged est appelé à partir du thread graphique. KeeperOfTheSoul avait absolument raison avec son commentaire.

Questions connexes