Это может рассматриваться как дубликат Безопасность потока, списки, привязка и WPF , но я все равно выкладываю его, так как не совсем доволен принятым ответом и могу выразить то, что я подозреваю, это тот же вопрос, точнее.
Любые операции, связанные с пользовательским интерфейсом в WPF / Silverlight, должны выполняться на пользовательском интерфейсе, включая INotifyPropertyChanged и INotifyCollectionChanged, но - когда при привязке данных к объекту (отдельному объекту или коллекции) каркас будет только читать значения данных, связанных объект синхронно в обработчике событий, или он может вернуться в любое время и запросить объект?
Я хочу, чтобы рабочий поток обновлял связанный с данными объект (часто), периодически вызывая событие CollectionChanged, если коллекция грязная, чтобы вызвать обновление пользовательского интерфейса. Если я могу знать, что фреймворк будет только читать значения в коллекции в обработчике событий, простой блокировки в коде, вызывающем событие для блокировки коллекции, будет достаточно, но если нет, мне придется выполнить глубокую копию коллекция.
Итак, 1) может ли фреймворк читать мою коллекцию даже вне обработчика событий и 2) если это возможно, есть ли лучший способ обновить что-либо в рабочем потоке и опубликовать его в пользовательском интерфейсе, кроме выполнения глубокой копии?