Estoy usando el evento FirstChanceException para registrar detalles sobre cualquier excepción lanzada.AppDomain.FirstChanceException y excepción de desbordamiento de pila
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
Console.WriteLine("Inside first chance exception.");
};
throw new Exception("Exception thrown in main.");
}
Esto funciona como se esperaba. Pero si se lanza una excepción dentro del controlador de eventos, se producirá un desbordamiento de la pila ya que el evento se generará recursivamente.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
throw new Exception("Stackoverflow");
};
throw new Exception("Exception thrown in main.");
}
¿Cómo manejo las excepciones que se producen en el controlador de eventos?
Editar:
Hay algunas respuestas que sugieren que envuelvo el código dentro del controlador de eventos en un bloque try/catch, pero esto no funciona ya que el evento se produce antes de que la excepción puede ser manejado.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
try
{
throw new Exception("Stackoverflow");
}
catch
{
}
};
throw new Exception("Exception thrown in main.");
}
sólo tiene que utilizar un campo booleano para evitar la repetición. –
No entiendo por qué quieres esto. Se manejan las excepciones de la primera oportunidad. ¿Por qué demonios arrojarías otro? – leppie
No estoy intencionalmente lanzando otro. ¿Qué sucede si intento registrar ese error y se produce una excepción mientras trato de registrar esa información? – nivlam