Вы пытаетесь протестировать что-то, чего нет ...
Нет причин для того, чтобы этот тест не прошел, потому что сам класс ObservableCollection<T>
не имеет привязки к потоку .Это не потокобезопасно, но просто означает, что поведение будет непредсказуемым, если вы используете его в многопоточном сценарии без надлежащей блокировки;в ObservableCollection<T>
нет ничего, что явным образом сгенерирует исключение, если вы сделаете это.
Однако CollectionView класс имеет сходство потоков, поэтомуневозможно добавить элементы в ObservableCollection<T>
из другого потока , если к нему прикреплен CollectionView
(что происходит, например, когда вы связываете ItemsControl
с коллекцией).Но CollectionView
вызывает исключение, а не ObservableCollection<T>
...
Возьмите следующий код:
var list = new ObservableCollection<string>();
// var view = CollectionViewSource.GetDefaultView(list);
ThreadPool.QueueUserWorkItem(_ => list.Add("foo"));
Он выполняется без исключения, но если вы раскомментируетестрока, которая создает CollectionView
, выдает NotSupportedException
:
Этот тип CollectionView не поддерживает изменения в его SourceCollection из потока, отличного от потока Dispatcher.