将ObservableCollection中的项目更新为线程安全

时间:2018-11-01 08:11:07

标签: wpf thread-safety observablecollection

有什么好的方法可以更新商品 在ObservableCollection中是否为“线程安全”?

这是我的方式。

var target = MyCollection.Where(i => i.Key== a_Key).Single();
MyCollection[MyCollection.IndexOf(target)] = NewValue;

但是我担心。如果我使用索引,则它可能不是线程安全的。 请给我建议。

在Internet上,THere是一些线程安全的ObservableCollection。 我想用1号。

还有什么更好的方法吗?

  1. https://gist.github.com/thomaslevesque/10023516
  2. https://www.codeproject.com/Articles/64936/Multithreaded-ObservableImmutableCollection
  3. https://www.nuget.org/packages/ParallelExtensionsExtras/
  4. https://gist.github.com/anonymous/26d9d070619de58fa8e28ea21fff04fd

编辑(1)

使用索引替换时,我不得不担心其他线程更改或对Collection排序的可能性。索引可能会更改,直到我覆盖为止。有可能吗?

我想知道更新/覆盖收藏项目的更多好方法。

如果有一种方法可以在没有索引的情况下更新/覆盖项目,请教我。

1 个答案:

答案 0 :(得分:1)

除非您使用.NET Framework 4.5中引入的BindingOperations.EnableCollectionSynchronization方法,否则无论如何只能在分派程序线程上更新数据绑定的ObservableCollection<T>

此方法在访问集合时接受object锁定。有关示例,请参见this答案。