Я использую событие FirstChanceException для регистрации сведений о любых заброшенных исключениях.AppDomain.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.");
}
Как обрабатывать исключения, возникающие в обработчике событий?
Edit:
Там же несколько ответов предполагающих, что я обернуть код внутри обработчика событий в Try/поймать блок, но это не работает, так как событие вызывается перед тем, исключение может быть обработано.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
try
{
throw new Exception("Stackoverflow");
}
catch
{
}
};
throw new Exception("Exception thrown in main.");
}
Просто используйте поле Его для предотвращения рекурсии. –
Я не понимаю, зачем вам это нужно. Исключены первые случайные исключения. Почему бы вам выбросить еще один? – leppie
Я не намеренно бросаю другой. Что произойдет, если я попытаюсь записать эту ошибку, и возникает исключение, когда я пытаюсь зарегистрировать эту информацию? – nivlam