ユーザーが離れるたびに「画面」の観察可能なコレクションを変更する次のコードがあります。
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に関連するスレッドの問題を乗り越えるために、クライアントのDispatcherへの呼び出しにラップされています。ただし、それでも次の例外が発生します。
このタイプのCollectionViewは、Dispatcherスレッドとは異なるスレッドからのSourceCollectionへの変更をサポートしていません。
上記のディスパッチャーは、次のようにWPFアプリケーションのMainViewModel(MVVMを使用しています)に設定されています。
public Dispatcher ClientDispatcher
{
get { return Dispatcher.CurrentDispatcher; }
}