Как я могу поймать AccessViolationException в Silverlight? - PullRequest
1 голос
/ 05 января 2011

Когда наше приложение Silverlight (вне браузера) закрывается пользователем, мы иногда получаем исключение AccessViolationException при попытке записи в файл журнала (в отдельном потоке).Похоже, что среда выполнения Silverlight завершает работу и не ожидает, что операции ввода-вывода будут выполняться во время последовательности выключения.

Попытка перехватить AccessViolationException и игнорировать его, похоже, не работает, даже когда метод украшенHandleProcessCorruptedStateExceptions, необходимые для перехвата этого и других исключений, представляющих действительно неприятные ошибки.

Есть ли еще более мощный способ перехвата исключения или хотя бы сокрытия его от пользователя?

1 Ответ

0 голосов
/ 27 апреля 2011

Я столкнулся с очень похожей ситуацией. Когда пользователь выходит из приложения, возникает исключение AccessViolationException. Причиной было то, что у меня был код, все еще работающий в фоновом потоке, и этот код регистрировался (используя NLog).

В конечном итоге NLog пытается создать FileStream во время завершения работы Silverlight, что приводит к ошибке.

Если вы включаете разрыв, когда в visual studio генерируется исключение (ctrl + alt + e), это помогает точно определить.

После того, как я понял, что это нужно исправить, я должен был остановить все мои фоновые потоки, прежде чем позволить приложению выйти. Это было не так уж плохо для меня, так как я использовал MEF, я мог просто утилизировать контейнер и реализовывать IDisposable там, где это необходимо.

...