如果有人能为这个提供一些帮助,我将非常感激!
我们正在使用: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
答案 0 :(得分:0)
您可能会问自己的一个问题:这个ExecutionEngineException仅在IE中发生,例如,不在FireFox中吗?
我知道Silverlight应该是独立于浏览器的,但我已经遇到过类似已知的Silverlight问题,该问题仅在IE中随机出现。
您收到ExecutionEngineException这一事实表明SL运行时由于某种原因而爆炸。
答案 1 :(得分:0)
这个异常非常奇特。如果一个人被抛出,那就是Game Over,0继续为CLR。没有托管代码可以捕获该异常。
当我遇到它时,它是驱动程序写入缓冲区的结果,该缓冲区没有正确编组,因此没有固定,并且CLR在驱动程序写入时移动了缓冲区。它不会立即崩溃,但通常发生在鼠标滑过表单的菜单栏之后(这可能导致创建并销毁大量小对象,然后导致CLR运行GC并压缩托管堆)。尽管我的一个工作线程正在与驱动程序进行通信,但它是抛出异常的主线程,这使事情变得更加混乱。
确保正确封送物品。如果ANYTHING来回传递给非托管代码,请确保使用GCHandle来固定对象。