System.ExecutionEngineException PropertyChanged

时间:2010-01-07 20:58:02

标签: silverlight silverlight-3.0 mvvm

如果有人能为这个提供一些帮助,我将非常感激!

我们正在使用:Silverlight 3 / MVVM / Blacklight DragDock控件/ ComponentOne Silverlight控件

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

代码基本上如下所示:

if(PropertyChanged!= null)Application.Current.RootVisual.Dispatcher.BeginInvoke(()=> PropertyChanged(this,new PropertyChangedEventArgs(propertyName)));

该代码适用于应用程序中的其他所有内容。基本上抛出财产改变事件的所有事情都经历了这一点。我不知道为什么这会突然失败。请按我的方式提出一些想法。

我在windbg的膝盖深处,想要了解正在发生的事情,但仍然很少。我很高兴提供转储或任何其他可能有用的信息。显然,这个特定错误给出的信息很少......

提前感谢David Justice

2 个答案:

答案 0 :(得分:0)

您可能会问自己的一个问题:这个ExecutionEngineException仅在IE中发生,例如,不在FireFox中吗?

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

您收到ExecutionEngineException这一事实表明SL运行时由于某种原因而爆炸。

答案 1 :(得分:0)

这个异常非常奇特。如果一个人被抛出,那就是Game Over,0继续为CLR。没有托管代码可以捕获该异常。

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

确保正确封送物品。如果ANYTHING来回传递给非托管代码,请确保使用GCHandle来固定对象。