【发布时间】:2014-07-14 13:11:04
【问题描述】:
我有以下问题: 如果我将一个简单的列表加载到绑定在我的 wpf 列表框上的 ICollectionView 中,那么 CurrentChanged 事件会按我的预期引发:
List<int> l = new List<int>();
l.Add(1);
l.Add(2);
MyCollection = CollectionViewSource.GetDefaultView(l);
MyCollection.CurrentChanged += MyCollection_CurrentChanged; // ok, it's raised
但是,假设我正在将数据加载到另一个线程中,然后,我想要相同的行为,即引发 currentChanged 事件,但它不起作用:
List<int> l = new List<int>();
Task.Factory.StartNew(() =>
{
l.Add(1);
l.Add(2);
})
.ContinueWith((r) =>
{
MyCollectio = CollectionViewSource.GetDefaultView(l);
MyCollectio.CurrentChanged += MyCollectio_CurrentChanged; // ko, it isn't raised.
}, TaskScheduler.FromCurrentSynchronizationContext());
请注意,我正在使用 TaskScheduler.FromCurrentSynchronizationContext() 来处理 UI 线程,但它不起作用。我也尝试过 Application.Current.Dispatcher.Invoke 没有运气。
【问题讨论】:
-
您使用的是哪个版本的 .net 框架?
标签: wpf multithreading icollectionview