如何从任务更新 CollectionViewSource 的 Source 属性?
我想异步加载我的CollectionViewSource
。所以我写了这样的代码:
list1 = new List<int>();
list2 = new List<int>();
Task.Factory.StartNew<Tuple<List<int>, List<int>>>(() =>
{
// Create and return tuple with 2 lists
}).ContinueWith(doneTask =>
{
list1 = doneTask.Result.Item1;
list2 = doneTask.Result.Item2;
// update UI
collectionViewSource1.Source = list1;
collectionViewSource2.Source = list2;
}, TaskScheduler.FromCurrentSynchronizationContext());
但是这个代码不起作用。
发生异常 System.ArgumentException:必须在与 DependencyObject 相同的线程上创建 DependencySource。
。
I want to load my CollectionViewSource
asynchronously. So I wrote such code:
list1 = new List<int>();
list2 = new List<int>();
Task.Factory.StartNew<Tuple<List<int>, List<int>>>(() =>
{
// Create and return tuple with 2 lists
}).ContinueWith(doneTask =>
{
list1 = doneTask.Result.Item1;
list2 = doneTask.Result.Item2;
// update UI
collectionViewSource1.Source = list1;
collectionViewSource2.Source = list2;
}, TaskScheduler.FromCurrentSynchronizationContext());
But this code doesn't work.
Exception System.ArgumentException: Must create DependencySource on same Thread as the DependencyObject.
occurs.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DependencyObject 具有线程关联性,您无法在后台线程上修改它们。您应该能够使用应用程序的调度程序来执行此操作,如下所示:
这篇MSDN 上的文章< /a> 可能会提供更多相关信息。
DependencyObjects have thread affinity, you cannot modify them on a background thread. You should be able to do this using the application's Dispatcher like this:
This article on MSDN might provide more relevant information.