.Net equivalente di set_unexpected ()
-
05-07-2019 - |
Domanda
Esiste un .net equivalente alla funzionalità C ++ unexpected () / set_unexpected ()?
Modifica: Scusa: in precedenza ho omesso alcuni dettagli:
Lingua: C # 2.0
Ho alcune app legacy che sembrano lanciare qualche eccezione non gestita da qualche parte. Voglio solo mettere in atto qualcosa per fermare il dolore del cliente fino a quando non riesco a rintracciare la vera fonte del problema. In C ++, la funzione indicata da set_unexpected () viene chiamata, per quanto ne so, quando un'eccezione altrimenti non gestita passa alla routine principale. Da qui la mia domanda su una funzionalità equivalente .net.
Soluzione
Esistono 3 possibili scenari per la gestione delle eccezioni non gestite, in base al tipo di applicazione:
- Per l'applicazione Windows Form, agganciare un gestore eventi a Application.ThreadException
- Per le applicazioni da riga di comando, collegare un gestore eventi a AppDomain. UnhandledException
-
Per le applicazioni ASP.NET, in Global.asax, creare:
protetto void Application_Error (Object mittente, EventArgs e)
DISCLAIMER: non sono uno sviluppatore di c ++, ma da quello che ho letto, questo dovrebbe rispondere alla tua domanda.
Altri suggerimenti
Questi gestori dovrebbero rilevare le eccezioni più impreviste nell'applicazione in modalità mista.
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)
{
....
}