问题在于:
我有一个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函数或其他解决方案?
答案 0 :(得分:2)
不允许此类操作的原因是因为它通常会导致循环引用。在CollectionChanged
事件中修改集合后,将再次引发该事件,这将再次修改集合。
我不建议尝试解决这个问题,因为集合修改本身并不常见。试着想办法以另一种方式去做。
但是,如果您需要,可以尝试使用ThreadPool.QueueUserWorkItem
在另一个线程中执行任务。您仍然希望检查可能的循环引用并观察竞争条件。