如何从任务更新 CollectionViewSource 的 Source 属性?

发布于 2024-11-02 03:56:22 字数 659 浏览 0 评论 0原文

我想异步加载我的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇纵 2024-11-09 03:56:22

DependencyObject 具有线程关联性,您无法在后台线程上修改它们。您应该能够使用应用程序的调度程序来执行此操作,如下所示:

App.Current.Dispatcher.Invoke((Action)delegate
{
    collectionViewSource1.Source = list1;
    collectionViewSource2.Source = list2;
}, null);

这篇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:

App.Current.Dispatcher.Invoke((Action)delegate
{
    collectionViewSource1.Source = list1;
    collectionViewSource2.Source = list2;
}, null);

This article on MSDN might provide more relevant information.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文