Обновить элемент в ObservableCollection как потокобезопасный - PullRequest
0 голосов
/ 01 ноября 2018

Есть ли хороший способ обновить элемент в ObservableCollection как «Потокобезопасный»?

Вот мой путь.

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

Но я волнуюсь. Если я использую индекс, он не может быть безопасным для потоков Пожалуйста, посоветуйте мне.

В Интернете существует некоторая многопотоковая коллекция 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)

Когда я использовал индекс для замены, мне приходилось беспокоиться о том, что другой поток может изменить или отсортировать коллекцию. Индекс может измениться, пока я не перезаписать. Есть ли возможность?

Я хочу узнать более хороший способ обновления / перезаписи элемента коллекции.

Если есть способ обновить / перезаписать элемент БЕЗ индекса, пожалуйста, научите меня ..

1 Ответ

0 голосов
/ 01 ноября 2018

В любом случае вы можете обновить только привязанный к данным ObservableCollection<T> в потоке диспетчера, если только вы не используете метод BindingOperations.EnableCollectionSynchronization , который был представлен в .NET Framework 4.5.

Этот метод принимает object для блокировки при доступе к коллекции. Пожалуйста, смотрите этот ответ для примера.

...