Visual Studio 2008 - приложение закрывается при возникновении необработанного исключения - PullRequest
2 голосов
/ 09 октября 2008

У меня проблема, когда возникает непредвиденное исключение при отладке проекта WinForm VB.NET.

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

Неопределенное исключение реализовано в новом классе My.MyApplication, найденном в ApplicationEvents.vb

Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
    Dim handler As New GlobalErrorHandler()
    handler.HandleError(e.Exception)

    e.ExitApplication = False
End Sub

Примечание: handler.HandleError просто показывает диалоговое окно и записывает ошибку в файл журнала.

Я также попробовал следующий код, который работал в VS2003, но он приводит к тому же поведению при запуске в VS2008:

    AddHandler System.Windows.Forms.Application.ThreadException, AddressOf OnApplicationErrorHandler
    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf OnUnhandledExceptionHandler

OnApplicationErrorHandler и OnUnhandledExceptionHandler делают то же самое, что handle.HandleError

Запуск приложения вне VS2008 приводит к ожидаемому поведению (приложение не завершается), но увеличивает цикл тестирования во время отладки.

Обновление: Я добавил пример кода в свой ответ, чтобы продемонстрировать эту проблему в C #

Ответы [ 3 ]

1 голос
/ 10 октября 2008

ОК. Я проделал большую работу над этим, но ответа до сих пор нет. Я обнаружил, что эта проблема связана не только с VB.NET, но и с C #

Вот простая программа на C #, которая демонстрирует проблему:

using System;
using System.Windows.Forms;
namespace TestCSharpUnhandledException
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        }

        void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            MessageBox.Show("Oops an unhandled exception, terminating:" + e.IsTerminating);                
        }

        void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show("Oops an unhandled thread exception");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            throw new Exception("Dummy unhandled exception");
        }
    }
}

Что мне показалось интересным, так это отладка в VS, генерируется событие UnhandledException , но запуск приложения вне VS вызывает ThreadException .

Также внутри VS e.IsTerminating имеет значение true, в конечном итоге я хочу, чтобы это было false. (Это свойство только для чтения)

1 голос
/ 10 октября 2008

Хорошо. Я нашел ответ на этот вопрос в этом посте: Обработка «необработанных исключений» в .NET 2.0

Спасибо, Марк!

Краткий ответ:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

Это вызывает одинаковое поведение в режиме отладки и запуска. В результате VS не закрывается при отладке

0 голосов
/ 09 октября 2008

Я не уверен насчет VS2008, но у меня была такая же проблема некоторое время в VS2005. Оказывается, мне просто нужно было перейти к «Отладка-> Исключения» (или Crtl + Alt + E) и убедиться, что все поля «Сброшено» не отмечены, но все флажки «Необработанные пользователем» отмечены.

Возможно, с вашим кодом происходит что-то необычное и необычное, но это может исправить это поведение.

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