2012-03-15 3 views
0

동안 ObservableCollection에 변경할 수 없음이 전자의 수집에 영향을 미친다 때문에다음은 문제의 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 전화 질수있는 런타임 오류가 발생합니다.

는 그러나 경우 방법은 내가 다음을 초래하지 않고 다른 방법에서 SomethingRelatedToE.execute를 호출 할 수 있습니다 완료 LayersChanged.

LayersChanged 메서드가 마치기 기능이나 다른 해결책과 같이 끝난 후에 다른 방법으로 직접 이동할 수있는 방법이 있습니까?

답변

2

이러한 유형의 작업이 허용되지 않는 이유는 일반적으로 순환 참조가되기 때문입니다. CollectionChanged 이벤트에서 컬렉션이 수정되면 이벤트가 다시 발생하여 컬렉션을 다시 수정합니다.

컬렉션 수정 자체가 드문 경우이므로이 문제를 해결하지 않는 것이 좋습니다. 다른 방법으로 생각하는 방법을 시도해보십시오.

그러나 필요한 경우 ThreadPool.QueueUserWorkItem을 사용하여 다른 스레드에서 작업을 시도 할 수 있습니다. 가능한 순환 참조를 확인하고 경쟁 조건을 감시하고 싶을 것입니다.