ObservableCollection et le filetage
J'ai un ObservableCollection
dans ma classe. Et plus loin dans ma classe, j'ai un fil. À partir de ce fil, je voudrais ajouter à mon ObservableCollection
. Mais je ne peux pas faire ça:
Ce type de CollectionView ne prend pas en charge les modifications de son SourceCollection à partir d'un thread différent de l'expéditeur au fil.
Noter que ce n'est pas le cas de la thread de l'INTERFACE utilisateur, donc je n'ai pas accès au répartiteur.
Vous devez vous connecter pour publier un commentaire.
JaredPar approche est valide. Une autre approche qui est à envisager à l'aide d'un thread-safe
ObservableCollection
au lieu de l'intégré dansObservableCollection
. Il y a quelques implémentations, mais Sasha salon de coiffure de la mise en œuvre et la CLinq Continu de la classe de Collection sont quelques-uns des meilleurs à mon avis. En interne, ces classes utilisent essentiellement l'approche décrite par JaredPar, mais l'encapsuler l'intérieur de la classe collection.La meilleure façon de résoudre ce problème est de passer le
Dispatcher
objet à la méthode de démarrage du thread d'arrière-plan.Maintenant, plus tard, lorsque vous devez ajouter à la collection, vous pouvez utiliser l'INTERFACE utilisateur
Dispatcher
objet.Comme @Reed l'a souligné, un plus générale de la solution est obtenue par l'utilisation
SynchronizationContext
. Voici un style fonctionnel de l'échantillon à l'aide deSynchronizationContext
pour créer un délégué responsable de l'ajout de nouvelles valeurs. Ceci a l'avantage de cacher à la fois la collecte et le modèle de thread du code de la création de l'objet.SynchronizationContext
qui a un côté fonctionnel.In.Net 4.5, vous pouvez utiliser les Thread-safe collections, ConcurrentDictionary, ConcurrentBag etc, selon ce qui convient à vos besoins : http://msdn.microsoft.com/en-us/library/dd997305.aspx
Merci de pensez à lire aussi : http://www.codeproject.com/Articles/208361/Concurrent-Observable-Collection-Dictionary-and-So