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.

È stato utile?

Soluzione

Esistono 3 possibili scenari per la gestione delle eccezioni non gestite, in base al tipo di applicazione:

  1. Per l'applicazione Windows Form, agganciare un gestore eventi a Application.ThreadException
  2. Per le applicazioni da riga di comando, collegare un gestore eventi a AppDomain. UnhandledException
  3. 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)
{
    ....
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top