Перехват C # необработанных исключений из других DLL - PullRequest
1 голос
/ 07 октября 2011

Мне нужно разделить части моего приложения на dll.

У меня в главном приложении есть событие необработанного исключения, и я выкидываю исключения в другой моей DLL для проверки процесса дампа исключений.

Проблема в том, что он может перехватывать пользовательские исключения ТОЛЬКО в том случае, если они создаются внутри конструктора.

Я предполагаю, что, возможно, мое пользовательское исключение упаковано в системное, но оно также не может поймать деление на ноль (опять же, тестирование).

Что я мог сделать не так?

В коде ниже. Ни один из моих обработчиков фактически никогда не вызывается. Приложение завершается беззвучно.

MAIN.DLL

    static void Main()
    {
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException);
        Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
        Application.Run(new Form1());
    }

    public static void Application_UnhandledException(
        object sender, UnhandledExceptionEventArgs e)
    {

        MessageBox.Show(e.ExceptionObject.ToString());

    }

    public static void Application_ThreadException(
object sender, ThreadExceptionEventArgs e)
    {

        MessageBox.Show(e.Exception.ToString());

    }

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        dcp.Init();
    }

    public static DefaultCommandProcessor.Dcp dcp = new DefaultCommandProcessor.Dcp();
}

ДРУГАЯ DLL

    public partial class Dcp : Form
    {
        public Dcp()
        {

            int y = 0;
            int x = 4 / y;  // caught in unhandled exception event in app.
        }
        public Int32 Init()
        {

            int y = 0;
            int x = 4 / y; // not caught
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...