У меня есть настройка MVVM.
Моя модель периодически вызывает некоторую службу, а затем вызывает действие в ViewModel, которое затем обновляет некоторые переменные, доступные для просмотра.
ПеременнаяReadOnlyObservableCollection<T>
, который имеет ObservableCollection<T>
, который он прослушивает.
Проблема в том, что Модель вызывает обратный вызов из другого потока, и, таким образом, она не позволяет очистить ObservableCollection<T>
вдругой поток.
Поэтому я подумал: используйте диспетчер, если мы не находимся в правильном потоке, вызовите его:
private void OnNewItems(IEnumerable<Slot> newItems)
{
if(!Dispatcher.CurrentDispatcher.CheckAccess())
{
Dispatcher.CurrentDispatcher.Invoke(new Action(() => this.OnNewItems(newItems)));
return;
}
this._internalQueue.Clear();
foreach (Slot newItem in newItems)
{
this._internalQueue.Add(newItem);
}
}
Я думаю, код довольно прост.
Проблема в том, что, хотя я выполняю его в правильном потоке (я думаю), он все равно вызывает у меня исключение в .Clear();
Почему это происходит?Как я могу обойти это, не создавая свой пользовательский ObservableCollection<T>
?