我有一个 ObservableCollection<Foo>
,我想要向其中添加一个项,操作如下:
Items.AddFromThread(svm);
其中AddFromThread
是一个扩展方法,代码如下:
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);
}
}
这本来运行得很好,但最近我开始在使用
Add
方法时遇到错误:
现在,我正在从Dispatcher线程中向我的未处理的异常类型'System.NotSupportedException'发生在PresentationFramework.dll中
附加信息:这种CollectionView不支持从与Dispatcher线程不同的线程对其SourceCollection进行更改。
ObservableCollection
添加项目-这就是检查的目的,所以这似乎是不可能的。但它抱怨的不是我的可观察集合,而是CollectionView
。实际上,我的UI正在绑定从Items
创建的ICollectionView
,如下所示:filteredItems = CollectionViewSource.GetDefaultView(Items);
所以这里发生了什么?如果我是从UI线程添加的,CollectionView
不应该从同一线程更新吗?如果不是,我该如何使其更新。
更糟糕的是,这很长时间以来都运行良好,据我所知我没有更改任何可能影响到它的东西。