2016-04-25 65 views
0

所有異常當你需要處理在WPF應用程序的所有異常,你可以使用:處理在WPF自定義控件庫

Application.DispatcherUnhandledException事件

像解釋herehere

我的問題是:

我創建了一個WPF自定義控件庫,所以我沒有App.xaml文件。我無法定義Application.DispatcherUnhandlerException。

甚至更​​多,我的圖書館將被用於非基於.net的應用程序。所以我不能在主應用程序中定義Application.DispatcherUnhandlerException,因爲沒有一個。

有沒有辦法在dll級別做到這一點?

回答

3

恕我直言,你不想要這個。不管有沒有可能。你不希望異常在libs中安靜地死去。使用你的庫的客戶應該決定如何處理你的異常。也許他們想記錄它。將其發送到網絡api。將它存儲在數據庫中。隨你。您應該只處理您的lib實際可能處理的libs中的特定異常。其餘的你應該鼓起來。

+0

我同意你的看法,是不是好的殺死庫中的異常。但我不想殺死例外。我對處理它們感興趣,可以處理一個異常,甚至讓它繼續向上拋出。還有一點是,我沒有分發我的圖書館,我用它來達到一個非常特定的目的。這個庫將成爲系統的一部分,但它不在.net中的系統。所以我需要將例外的日誌放入我的庫中。 –

0

我不認爲你需要一個app.xaml來註冊這些事件。

如果你想做到這一點,在你的類的一個靜態初始化,將肯定被任何人使用控制庫使用添加以下代碼:

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 
}