如何在多线程上下文中在ObservableCollection <T>中正确插入IEnumerable <T>

使用this代码,我得到NullReferenceException个thimethimes(10次中的4/5),这肯定是因为用于插入范围的线程不是Dispatcher线。我没有收到异常,如果我像这样包装链接文章的GetOrders方法的最后三行:

App.Current.Dispatcher.Invoke(() =>
{
    if (type == "buy") CheckNumberAndAdd(orderList,BuyOrders);
    else CheckNumberAndAdd(orderList,SellOrders);
    CheckNumberAndAdd(pendingList,PendingOrders);
});

我不想在ViewModel中使用此包装器。我希望它可以在链接的帖子中显示的AsyncObsetion<T>的实现中实现,因此我将InsertRange的{​​{1}}替换为以下内容:

AsyncObsetion<T>

使用此方法,当我从public void InsertRange(IEnumerable<T> items) { if (SynchronizationContext.Current == context) { foreach (var item in items) Items.Add(item); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedaction.Reset)); } else { App.Current.Dispatcher.Invoke(() => { foreach (var item in items) Items.Add(item); }); context.Send(RaiseCollectionChanged,new NotifyCollectionChangedEventArgs(NotifyCollectionChangedaction.Reset)); } } 中创建PendingOrders时,我在Pendings中得到了977个(预期)或976个(比实际少1个)项目,但我仍然得到了{ {1}}有时即使PendingOrders中有977个项目!

a283133294 回答:如何在多线程上下文中在ObservableCollection <T>中正确插入IEnumerable <T>

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2865222.html

大家都在问