Вопрос

Существует ли .net, эквивалентный функциональности C ++ непредвиденный () / set_unexpected ()?

<Ч>

Изменить . Извините, некоторые детали ранее пропущены:

Язык: C # 2.0

У меня есть несколько устаревших приложений, которые, кажется, где-то создают необработанное исключение. Я просто хочу что-то предпринять, чтобы избавить клиента от боли, пока я не укажу фактический источник проблемы. Насколько я знаю, в C ++ функция, на которую указывает set_unexpected (), вызывается, когда необработанное исключение в противном случае попадает в основную подпрограмму. Отсюда мой вопрос о .net эквивалентной функциональности.

Это было полезно?

Решение

Существует 3 возможных сценария обработки необработанных исключений в зависимости от типа приложения:

<Ол>
  • Для приложения форм Windows подключите обработчик событий к Application.ThreadException
  • Для приложений командной строки подключите обработчик событий к AppDomain. UnhandledException
  • Для приложений ASP.NET в Global.asax создайте:

    protected void Application_Error (Отправитель объекта, EventArgs e)

  • ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не разработчик для C ++, но из того, что я прочитал, это должно ответить на ваш вопрос.

    Другие советы

    Эти обработчики должны перехватывать самые неожиданные исключения в вашем приложении смешанного режима.

    private delegate long UnhandledExceptionFilter(IntPtr exception);
    
    [DllImport("KERNEL32.DLL", SetLastError = true)]
    private static extern IntPtr SetUnhandledExceptionFilter([MarshalAs(UnmanagedType.FunctionPtr)] UnhandledExceptionFilter filter);
    
    // put these in your bootstrapper
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
    Application.ThreadException += ApplicationThreadException;
    SetUnhandledExceptionFilter(UnhandledExceptionFilter);
    
    void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        ...
    }
    
    void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
    {
        ...
    }
    
    long UnhandledExceptionFilter(IntPtr exception)
    {
        ....
    }
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top