2014-10-07 2 views
-3

내 WPF C# 응용 프로그램에서 가끔 'System.ExecutionEngineException'유형의 예외가 발생했습니다. '라는 오류가 발생합니다. 오류가 OnPropertyChanged 이벤트의 중간에 발생하는 것 같습니다.WPF에서 'System.ExecutionEngineException'유형의 예외가 throw되었습니다.

예외 정보 : InnerException이 null입니다. 데이터는 {System.Collections.EmptyReadOnlyDictionaryInternal}

입니다 .Net 4.5.1을 사용하고 있습니다.

누구든지이 문제를 일으키는 아이디어가 있습니까?

protected void OnPropertyChanged(string propName) 
    { 
     VerifyProperty(propName); 

     PropertyChangedEventHandler handler = PropertyChanged; 

     if (handler != null) 
     { 
      try 
      { 
       handler(this, new PropertyChangedEventArgs(propName)); 
      } 
      catch (Exception) 
      { 
      } 
     } 
    } 

PropertyChangedEventArgs 호출 중에 예외가 발생하는 것 같습니다.

여기에는 속성 확인이 있습니다.

[Conditional("DEBUG")] 
    private void VerifyProperty(string property) 
    { 
     Type t = this.GetType(); 

     System.Reflection.PropertyInfo info = t.GetProperty(property); 

     if (info == null) 
      throw new ArgumentException(string.Format("Property \"{0}\" does not exist in type {1}!", property, t.Name)); 
    } 
+0

OnPropertyChanged 이벤트에서 코드를 게시하는 방법은 어떻습니까? 코드를 보지 않고는 아무 것도 말할 수 없습니다. 우린 독자가 아니에요. –

+0

VerifyProperty 란 무엇입니까? null 또는 부정확 한 값을 처리 할 수 ​​있습니까? – OmegaMan

답변

0

가비지 수집에서 발생할 수있는 문제에 대한 참조가 System.ExecutionEngineException을 일으키는 것을 발견했습니다. 또한 예외를 일으키는 .NET 버그에 대한 여러 참조를 발견했습니다.

예외가 발생했을 때 업데이트되는 개체가 우리 코드에서 동시에 수정되었습니다. 수정은 단일 객체 참조입니다. project.ExtendedData = status.ProjectStatus; ExtendedData는 예외가 발생할 때 업데이트되는 속성입니다.

개체를 수정할 때 업데이트를 사용하지 않도록 코드를 수정했습니다. 이 문제가 해결되었습니다. 수정 전에는 오류의 80 %를 재현 할 수있었습니다.

가비지 수집 된 개체를 어떻게 참조 할 수 있는지 잘 모르겠습니다. 개체에 대한 참조가 없을 때까지 개체가 가비지 수집되지 않아야한다고 생각했습니다. CLR 가비지는 아직 사용중인 개체를 어떻게 수집합니까?

관련 문제