2010-01-07 73 views
1

如果任何人都可以为这个提供一些帮助,我会非常感激!System.ExecutionEngineException PropertyChanged

我们使用:Silverlight 3中/ MVVM /黑光DragDock控制/ ComponentOne的Silverlight控件

我有一个Silverlight应用程序,在很大程度上依赖于MVVM模式。直到最近,该应用程序似乎一直运行良好。我已经开始注意到半随机(半随机=足够长的时间〜2 - 5分钟)我可以重现来自PropertyChanged事件引发的System.ExecutionEngineException。通知被提出的属性名称并不总是相同的属性名称(属性更改事件的触发发生在基本ViewModel类中)。

的代码基本上是这样的:

如果(的PropertyChanged!= NULL)Application.Current.RootVisual.Dispatcher.BeginInvoke(()=>的PropertyChanged(这一点,新PropertyChangedEventArgs(propertyName的)));

该代码适用于应用程序中的所有其他应用程序。基本上所有抛出物业的事物都会改变这一点。我不确定为什么突然失败。请按我的方式思考一下。

我一直在windbg膝盖深处试图掌握发生了什么,并且仍然很少。我很乐意提供转储或任何其他可能有用的信息。显然,从这个特殊的错误给出的信息非常少......

谢谢你的时间提前,大卫正义

+0

谢谢大家的答案。我认为我们将搜索范围缩小到了第三方树控件中的一个问题,该问题在基础集合排序之后抛出树中选定项目的跟踪问题时抛出了内部异常库。错误的奇妙之处在于它以两种不同的方式表现出来。其一,它在选中的项目没有改变时改变的属性上发生爆炸,但是树的另一个子项被改变,然后一个可观察的集合改变事件被触发。第二个是当选定的项目发生更改时,索引超出范围例外。 – Justice 2010-03-09 13:33:40

回答

0

你可能会问自己一个问题:这是在ExecutionEngineException只有IE和发生,例如,不在FireFox中?

我知道Silverlight应该是独立于浏览器的,但我已经遇到类似的已知Silverlight问题,它只在IE中随机出现。

您得到一个ExecutionEngineException的事实是指出SL运行时由于某种原因而爆炸。

+0

谢谢你的想法。我只在Firefox中进行测试,而且我真的考虑过在ie b/c中测试它,因为我假设运行时独立。不幸的是,我没有看到任何改变。在一些UI交互循环之后,我仍然看到运行时崩溃。 我觉得我应该寻找一个可能的内存泄漏,或仍然列在虚拟机更改中的UI控件。我一直在观看记忆,它似乎正在清理自己,因为他们认为,当他们离开上下文时,他们会自我消除。 – Justice 2010-01-09 23:54:08

0

这个例外是相当异乎寻常的。如果有人被抛出,这是游戏结束,0继续为CLR。没有托管代码可以捕获该异常。

当我遇到它时,它是驱动程序写入缓冲区的结果,该缓冲区没有正确编组,因此未被锁定,CLR在驱动程序写入缓冲区时移动了缓冲区。它不会立即崩溃,但通常在鼠标移过窗体的菜单栏后发生(这可能导致创建并销毁大量小对象,然后导致CLR运行GC并压缩托管堆)。尽管我的一个工作线程正在与驱动程序通信,但它是引发异常的主线程,这使得事情变得更加混乱。

确保事物正在编组。如果ANYTHING被传递给非托管代码,请确保使用GCHandle来固定对象。