在CollectionChanged事件期间无法更改ObservableCollection

时间:2012-03-15 16:36:24

标签: vb.net silverlight methods

问题在于:

我有一个CollectionChanged处理程序方法:

    Private Sub LayersChanged(sender As Object, e As Collections.Specialized.NotifyCollectionChangedEventArgs)
        If e.ItemCollectionHasNewItems IsNot Nothing Then
            SomethingRelatedToE.execute
        End If
    End Sub

我无法调用 SomethingRelatedToE.excecute ,因为它会影响 e 的集合,从而导致运行时错误。

但是,如果 LayersChanged 方法已经完成,我可以从另一个方法调用 SomethingRelatedToE.execute 而不会影响它。

有没有办法让我在 LayersChanged 方法完成后直接转到另一个方法,比如Goto函数或其他解决方案?

1 个答案:

答案 0 :(得分:2)

不允许此类操作的原因是因为它通常会导致循环引用。在CollectionChanged事件中修改集合后,将再次引发该事件,这将再次修改集合。

我不建议尝试解决这个问题,因为集合修改本身并不常见。试着想办法以另一种方式去做。

但是,如果您需要,可以尝试使用ThreadPool.QueueUserWorkItem在另一个线程中执行任务。您仍然希望检查可能的循环引用并观察竞争条件。