WPF,抛出了类型'System.ExecutionEngineException'的异常

时间:2014-10-07 20:40:44

标签: wpf exception

在我的WPF C#应用中,我偶尔会收到错误:"类型异常' System.ExecutionEngineException'被扔了#34;该错误似乎发生在OnPropertyChanged事件的中间。

来自例外的信息: 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));
    }

1 个答案:

答案 0 :(得分:0)

我发现了一些垃圾收集可能出现问题的引用,导致System.ExecutionEngineException。我还发现了几个引起异常的.Net错误的引用。

在我们的代码中,发生异常时正在更新的对象正在同时进行修改。修改是单个对象引用:                     project.ExtendedData = status.ProjectStatus; ExtendedData是发生异常时正在更新的属性。

我修改了代码以在修改对象时禁用更新。这解决了这个问题。在修复之前,我能够在80%的时间内重现错误。

我不确定如何引用垃圾收集的对象。我认为在没有对象的引用之前,对象不应该被垃圾收集。 CLR垃圾如何收集仍在使用的对象?