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.

War es hilfreich?

Lösung

Es 3 mögliche Szenarien für nicht behandelte Ausnahmen Handhabung, basierend auf der Art der Anwendung:

  1. Für Windows Forms-Anwendung, einen Event-Handler Haken auf Application.ThreadException
  2. Für Commandline-Anwendungen, Haken einen Event-Handler an AppDomain. UnhandledException
  3. 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)
{
    ....
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top