Исключение, получающее исключение Application.ThreadException и AppDomain.CurrentDomain.UnhandledException - PullRequest
4 голосов
/ 18 сентября 2008

У меня проблема с зависанием приложения и выдачей по умолчанию всплывающего окна «Пожалуйста, сообщите Microsoft об этой проблеме» вместо диалогового окна «необработанное исключение» в приложении.

В коде приложения и Application.ThreadException, и AppDomain.CurrentDomain.UnhandledException перенаправляются на метод, который записывает журнал ошибок на диск, сохраняет скриншот на диск и отображает понятное диалоговое окно.

Но когда возникает эта ошибка, ничего из этого не происходит. Все, что я получаю, это в программе просмотра событий:

EventType clr20e3, P1 myapp.exe, P2 4.0.0.0, P3 47d794d4, P4 mscorlib, P5 2.0.0.0, P6 471ebc5b, P7 15e5, P8 27, P9 system.argumentoutofrange, P10 NIL

Учитывая, что ошибка появляется только после того, как приложение работает в течение нескольких часов, мне интересно, может ли это быть проблемой утечки памяти. Я немного искал "clr20e3", но мне удалось найти только материал ASP.Net. Мое приложение - Windows Forms (.Net 2.0) exe, использующее довольно много сборок - как на C #, так и на некоторых неуправляемых C ++.

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

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

ОБНОВЛЕНИЕ: Основной причиной первоначальной ошибки был доступ к массиву с отрицательным индексом (это был system.argumentoutofrange). Почему это не было поймано в ловушку, для меня немного загадка, но, учитывая, что оба исключения были отправлены в один и тот же код обработки, мне интересно, возможно, не было условия, когда (например) оба были вызваны и сражались за ресурс (например, файл журнала)?

Мне удалось доказать это, выполнив EventLog.WriteEntry, прежде чем что-либо еще в коде обработки ошибок. Теперь, добавив флаг для предотвращения повторного ввода в обработке ошибок, у меня больше не возникает проблем ...

Ответы [ 3 ]

1 голос
/ 18 сентября 2008

Вы проверяли, выбрасывается ли ArgumentOutOfRangeException из вашего обработчика? Может быть, стоит сделать простую запись в журнал событий или проследить в записи вашего обработчика исключений и подтвердить, что вы действительно его нажали.

Редактировать: Информацию для записи в журнал событий можно найти по адресу:

http://support.microsoft.com/kb/307024

1 голос
/ 18 сентября 2008

Просто стрельба в темноте - возможно ли, что исключение ArgumentOutOfRangeException фактически выбрасывается из вашего исключения обработчик ?

Кроме того, вы не сказали, о каком типе приложений идет речь - Application.ThreadException влияет только на потоки WinForms, поэтому, если это не приложение с графическим интерфейсом, это бесполезно. (См. Раздел замечаний в документации MSDN )

0 голосов
/ 06 декабря 2010

Вы вызываете Application.Run () более одного раза? Это будет демонстрировать те же симптомы, которые вы описываете. Вы должны написать собственный класс ApplicationContext в качестве обходного пути. Просто мои 0,02 доллара с поправкой на инфляцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...