Sto utilizzando l'evento FirstChanceException per registrare i dettagli di eventuali eccezioni generate.AppDomain.FirstChanceException e eccezione di overflow dello stack
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
Console.WriteLine("Inside first chance exception.");
};
throw new Exception("Exception thrown in main.");
}
Funziona come previsto. Ma se viene lanciata un'eccezione all'interno del gestore eventi, si verificherà un overflow dello stack poiché l'evento verrà generato in modo ricorsivo.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
throw new Exception("Stackoverflow");
};
throw new Exception("Exception thrown in main.");
}
Come si gestiscono le eccezioni che si verificano all'interno del gestore eventi?
Edit:
Ci sono alcune risposte suggeriscono che ho avvolgere il codice all'interno del gestore di eventi in un blocco try/catch, ma questo non funziona in quanto l'evento viene generato prima che l'eccezione può essere gestita.
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
try
{
throw new Exception("Stackoverflow");
}
catch
{
}
};
throw new Exception("Exception thrown in main.");
}
basta usare un campo bool per evitare la ricorsione. –
Non capisco perché vorresti questo. Vengono gestite le prime eccezioni di possibilità. Perché mai ne butterei un altro? – leppie
Non ne lancio intenzionalmente un altro. Cosa succede se sto cercando di registrare quell'errore e viene generata un'eccezione mentre sto cercando di registrare tali informazioni? – nivlam