我正在使用 PivotViewer 并看到 iexplorer.exe 引发了此异常。
“Silverlight 应用程序代码中的未处理错误:4004
类别:ManagedRuntimeError
消息:System.ArgumentException:ICollectionView 只能包含 Microsoft.Internal.Pivot.ViewModels.GridViewModel.UpdateOnModelChanged() 的 Microsoft.Internal.Pivot.ViewModels.ViewBaseViewModel.OnUpdateComplete(Object sender, EventArgs e) 的 PivotViewer 的 ItemsSource 中的项目在 System.Windows.Controls.Pivot.PivotViewerView.SetModel(PivotViewerProperty sortPivotProperty, IEnumerable`1 源) 在 Microsoft.Internal.Pivot 的 System.Windows.Controls.Pivot.PivotViewerView.ExposeCollectionView(ICollectionView collectionView, CollectionViewSource collectionSource, IDisposable deferrer)。 Microsoft.Internal.Pivot.Controls.CollectionViewContainer.b__0() 上的 Controls.CollectionViewContainer.UpdateContent()
"
这是我在做什么的描述。透视查看器的 ItemsSource 绑定到 ViewModel 中名为“Sessions”的 ObservableCollection。当用户第一次访问我的网站时,他没有登录,我将从远程演示数据库(通过使用 WebClient.OpenReadAsync)填充数据透视查看器。当用户登录时,我将清除“会话”并从他自己的数据库中异步读取数据(使用相同的代码 WebClient.OpenReadAsync)。此时一切都按预期工作。PivotViewer 显示演示数据并在他登录后正常刷新。
问题发生在他注销时,当我使用相同的代码清除“会话”并再次从演示数据库异步读取数据时。它抛出上述异常。
我有一个解决方法。当用户注销时,如果我仍然清除“会话”但不从演示数据库中添加任何数据,它将起作用。我可以多次登录和注销,没有任何问题。所以这表明问题可能与我将数据添加到“会话”ObservableCollection 的代码有关。
我还猜测这是与 WebClient 的 OpenReadAsync 从远程网站读取数据引起的线程相关的竞争条件。
我现在被困住了,任何帮助将不胜感激。谢谢!