У меня есть следующий фрагмент кода, который изменяет наблюдаемую коллекцию «экранов» всякий раз, когда пользователь уходит.
void OnUserLeft(int roomId, int userId, string username)
{
client.ClientDispatcher.Invoke(
(Action<int>)((id) =>
{
Console.WriteLine("Hello before the storm!");
var screensToCheck = client.Screens.Where(s => s.CpuId == id).ToList();
screensToCheck.Each(s => client.Screens.Remove(s));
Console.WriteLine("Hello there!");
}), userId);
}
Это обернуто в вызов клиентского диспетчера, предположительно, чтобы обойти проблемы потоков, связанные с CollectionViews. Тем не менее, я все еще получаю следующее исключение:
Этот тип CollectionView не поддерживает изменения в его SourceCollection из потока, отличного от потока Dispatcher.
Диспетчер, который вы видите выше, установлен в MainViewModel приложения WPF (мы используем MVVM), например так:
public Dispatcher ClientDispatcher
{
get { return Dispatcher.CurrentDispatcher; }
}