System.ExecutionEngineException PropertyChanged - PullRequest
1 голос
/ 07 января 2010

Если кто-нибудь может помочь с этим, я был бы очень благодарен!

Мы используем: Silverlight 3 / MVVM / Blacklight DragDock Control / ComponentOne Silverlight *

У меня есть приложение Silverlight, которое сильно зависит от шаблона MVVM. До недавнего времени приложение работало нормально. Я начал замечать полуслучайное (полуслучайное = в течение достаточно длительного периода времени ~ 2 - 5 минут), я могу воспроизвести исключение System.ExecutionEngineException, возникающее из вызываемого события PropertyChanged. Имя свойства, для которого создается уведомление, не всегда совпадает с именем свойства (запуск события изменения свойства происходит в базовом классе ViewModel).

Код в основном выглядит следующим образом:

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

Код работает для всего остального в приложении. В основном все, что выбрасывает событие, измененное свойством, проходит через это. Я не уверен, почему это терпит неудачу внезапно. Пожалуйста, подбрось мне мысли.

Я был по колено в болоте, пытаясь понять, что происходит, и до сих пор очень мало. Я бы с радостью предоставил дамп или любую другую информацию, которая может оказаться полезной. Очевидно, что эта конкретная ошибка дает очень мало информации ...

Спасибо заранее, Дэвид Джастис

Ответы [ 2 ]

0 голосов
/ 10 февраля 2010

Это исключение довольно экзотическое. Если его бросают, игра окончена, 0 продолжается для CLR. Управляемый код не может перехватить это исключение.

Когда я столкнулся с ним, это было результатом записи драйвера в буфер, который не был должным образом упорядочен и поэтому не был закреплен, и CLR переместил буфер, пока драйвер записывал в него. Это не произойдет мгновенно, но обычно происходит после того, как мышь наведется на строку меню формы (что, вероятно, привело к созданию и уничтожению большого количества небольших объектов, что затем приводит к тому, что CLR запускает GC и сжимает управляемую кучу). Несмотря на то, что один из моих рабочих потоков связывался с драйвером, это был основной поток, вызвавший исключение, что еще более запутало ситуацию.

Убедитесь, что все идет правильно. Если НИЧЕГО передается назад и вперед в неуправляемый код, убедитесь, что вы используете GCHandle для закрепления объектов.

0 голосов
/ 09 января 2010

Вопрос, который вы можете задать себе: это ExecutionEngineException происходит только в IE и, например, не в FireFox?

Я знаю, что Silverlight должен быть независимым от браузера, но я уже сталкивался с похожей известной проблемой Silverlight, которая возникала случайным образом только в IE.

Тот факт, что вы получаете исключение ExecutionEngineException, указывает на то, что среда выполнения SL по какой-то причине взорвана.

...