Эквивалент .Net set_unexpected () - PullRequest
1 голос
/ 29 октября 2008

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


Редактировать: Извините - некоторые детали ранее опущены:

Язык: C # 2.0

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

Ответы [ 2 ]

2 голосов
/ 29 октября 2008

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

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

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

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

0 голосов
/ 26 июля 2012

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

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)
{
    ....
}
...