2016-04-25 128 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 
}