Исключение отказывается быть обработанным - PullRequest
0 голосов
/ 07 января 2009

Я пробовал два способа отловить неожиданные необработанные исключения:

static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += 
                new UnhandledExceptionEventHandler(ErrorHandler.HandleException);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try
            {
                Application.Run(new OCR());
            }
            catch (Exception ex)
            {
                ErrorWindow errorWindow = new ErrorWindow(ex);
                errorWindow.ShowDialog();
                Application.Exit();
            }
        }

Когда я запускаю приложение с помощью visual studio, все работает нормально. если я использую exe-файл в папке bin \ Debug, исключения не обрабатываются. Приложение ведет себя так, как будто блока catch не было. Я не знаю, что происходит. есть идеи?

изменить: исключение не в порядке Загрузка

Ответы [ 3 ]

4 голосов
/ 07 января 2009

Я так понимаю, что у вас есть исключение в методе OnLoad или Load вашей формы. Это печально известная проблема, которая не помогает IDE заставить ее вести себя по-другому. По сути, вам нужно убедиться, что ваш OnLoad / Load не выбрасывает ... возможно, поместите туда catch и установите свойство, которое вы сможете проверить позже?

2 голосов
/ 07 января 2009

Я должен обработать System.Windows.Forms.Application.ThreadException - тогда это работает.

0 голосов
/ 07 января 2009

Я столкнулся с интересной проблемой при работе с кодом J #.

Предположим, что выбрасываемое исключение имеет тип FreakyException. Теперь FreakyException наследуется от FreakyExceptionBase класса, который, в свою очередь, наследуется от Exception класса. Хитрость в том, что каждый из них определен в своих сборках. Скажем, FreakyExceptionBase находится в ExceptionBases.dll, но сам FreakyException находится в Worker.dll. Ваша заявка ссылается только на Worker.dll, но НЕ на ExceptionBases.dll.

В этом случае ваш catch(Exception) не поймает FreakyException, потому что .NET не сможет определить цепочку наследования, которая указывает, что FreakyException на самом деле наследует форму Exception.

Это произошло с кодом J #, потому что исключения J # наследуются от java.lang.exception, и мой проект не ссылался на библиотеки J #. Когда на J # ссылались, проблема ушла.

Возможно, это то же самое с вашим приложением?

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