C# 向可观察集合添加项导致集合视图异常
因此,我有一个C# 向可观察集合添加项导致集合视图异常,c#,wpf,multithreading,C#,Wpf,Multithreading,因此,我有一个可观察集合,我向其中添加了一个项目,如下所示: Items.AddFromThread(svm); public static void AddFromThread<T>(this ICollection<T> s, T obj) { if (System.Windows.Application.Current.Dispatcher.Thread != System.Threading.Thread.CurrentThread) {
可观察集合
,我向其中添加了一个项目,如下所示:
Items.AddFromThread(svm);
public static void AddFromThread<T>(this ICollection<T> s, T obj)
{
if (System.Windows.Application.Current.Dispatcher.Thread != System.Threading.Thread.CurrentThread)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => s.AddFromThread(obj)), null);
}
else
{
s.Add(obj);
}
}
filteredItems = CollectionViewSource.GetDefaultView(Items);
其中,AddFromThread
是一个如下所示的扩展方法:
Items.AddFromThread(svm);
public static void AddFromThread<T>(this ICollection<T> s, T obj)
{
if (System.Windows.Application.Current.Dispatcher.Thread != System.Threading.Thread.CurrentThread)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => s.AddFromThread(obj)), null);
}
else
{
s.Add(obj);
}
}
filteredItems = CollectionViewSource.GetDefaultView(Items);
那么这里发生了什么?如果我是从UI线程添加的,CollectionView
不应该从同一线程更新吗?如果没有,我如何使它这样做
更糟糕的是,这在很长一段时间内运行良好,据我所知,我没有改变任何可能影响这一点的事情。好的-进行一点调查,发现
CollectionView
是在不同的线程上创建的,这似乎是问题的根源。虽然为什么它以前似乎不是一个问题仍然令人费解
因此我修复了它,以确保创建CollectionView
的代码也在Dispatcher.Thread
上运行。在这种情况下,错误消息具有误导性。问题不是我试图从一个非UI线程添加,而是我从一个UI线程添加,而是添加到另一个线程上的东西