.NET-Equivalent von set_unexpected ()
-
05-07-2019 - |
Frage
Gibt es eine .net entspricht das C ++ unerwartet () / set_unexpected () Funktionalität?
Edit: Sorry - ich weggelassen, einige Details vorher:
Sprache: C # 2.0
Ich habe einige Legacy-Anwendungen, die einige nicht behandelte Ausnahme irgendwo zu werfen scheinen. Ich möchte nur etwas an seinem Platz setzen dem Kunden Schmerz zu stoppen, bis ich die eigentliche Ursache des Problems verfolgen kann. In C ++ wies die Funktion bei durch set_unexpected () wird aufgerufen, soweit ich weiß, wenn eine sonst nicht behandelte Ausnahme zur Hauptroutine sprudelt. Daher meine Frage nach einer .net gleichwertigen Funktionalität.
Lösung
Es 3 mögliche Szenarien für nicht behandelte Ausnahmen Handhabung, basierend auf der Art der Anwendung:
- Für Windows Forms-Anwendung, einen Event-Handler Haken auf Application.ThreadException
- Für Commandline-Anwendungen, Haken einen Event-Handler an AppDomain. UnhandledException
-
Für ASP.NET-Anwendungen, in Global.asax, erstellen:
protected void Application_Error (Object sender, EventArgs e)
HAFTUNGSAUSSCHLUSS: Ich bin nicht c ++ Entwickler, sondern von dem, was ich gelesen habe, sollte dies Ihre Frage beantworten
.Andere Tipps
sollten Diese Handler unerwartetste Ausnahmen in Ihrer gemischten Modus Anwendung fangen.
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)
{
....
}