2016-04-25 12 views
0

Wenn Sie alle Ausnahmen in Ihrer WPF-Anwendung behandeln möchten, können Sie verwenden:Behandlung Alle Ausnahmen in einer WPF Custom Control-Bibliothek

Application.DispatcherUnhandledException Ereignis

Wie here und here erklärt.

Mein Problem ist:

Ich erstelle eine WPF Custom Control-Bibliothek, so dass ich keine app.xaml-Datei haben. Ich kann keine Application.DispatcherUnhandlerException definieren.

Und noch mehr, meine Bibliothek wird zu einer nicht .net-basierten App verwendet werden. Daher kann ich Application.DispatcherUnhandlerException in der Hauptanwendung nicht definieren, da es keine gibt.

Gibt es eine Möglichkeit, dies in einer DLL-Ebene zu machen?

Antwort

3

IMHO wollen Sie das nicht. Egal ob es möglich ist oder nicht. Sie wollen nicht, dass Ausnahmen in libs still sterben. Clients, die Ihre Bibliotheken verwenden, sollten entscheiden, was mit Ihren Ausnahmen geschehen soll. Vielleicht wollen sie es protokollieren. Senden Sie es an eine Web-API. Speichern Sie es in der Datenbank. Was auch immer. Sie sollten nur bestimmte Ausnahmen in Ihren Bibliotheken behandeln, mit denen Ihre Bibliothek umgehen könnte. Den Rest solltest du aufblasen.

+0

Ich stimme Ihnen zu, ist nicht Töte die Ausnahmen in der Bibliothek. Aber ich bin nicht daran interessiert, die Ausnahmen zu töten. Ich interessiere mich dafür, sie zu behandeln, es ist möglich, eine Ausnahme zu behandeln und sogar so weiter oben werfen zu lassen. Ein weiterer Punkt ist, dass ich meine Bibliothek nicht verteile, sondern zu einem ganz bestimmten Zweck benutze. Diese Bibliothek wird ein Teil eines Systems sein, aber das System ist nicht in .net. Also muss ich das Protokoll der Ausnahmen in meine Bibliothek legen. –

0

Ich glaube nicht, dass Sie eine app.xaml für diese Ereignisse registrieren müssen.

Wenn Sie dies tun wollen, fügen Sie diesen Code in einem statischen Initialisierer in einer Ihrer Klassen, wird sicher von jedermann mit der Steuer Bibliothek verwendet werden:

if (AppDomain.CurrentDomain != null) { 
    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
} 

if (Dispatcher.CurrentDispatcher != null) { 
    Dispatcher.CurrentDispatcher.UnhandledException += CurrentDispatcher_UnhandledException; 
} 

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { 
    // Do something with the exception in e.ExceptionObject 
} 

static void CurrentDispatcher_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { 
    // Do something with the exception in e.Exception 
} 
Verwandte Themen