Я использую событие FirstChanceException для регистрации сведений о любых заброшенных исключениях.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
Console.WriteLine("Inside first chance exception.");
};
throw new Exception("Exception thrown in main.");
}
Это работает так, как ожидалось. Но если исключение выбрано внутри обработчика событий, произойдет переполнение стека, так как событие будет рекурсивно поднято.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
throw new Exception("Stackoverflow");
};
throw new Exception("Exception thrown in main.");
}
Как обрабатывать исключения, возникающие в обработчике событий?
Изменить:
Вот несколько ответов, предполагающих, что я переношу код внутри обработчика события в блок try/catch, но это не работает, поскольку событие возникает до того, как будет обработано исключение.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
try
{
throw new Exception("Stackoverflow");
}
catch
{
}
};
throw new Exception("Exception thrown in main.");
}