【发布时间】:2016-04-10 14:53:16
【问题描述】:
阅读 this MSDN 页面后,我在我的 .net 类库中创建了一个全局异常处理程序,用于日志记录,如下所示:
static void OnException(object sender, UnhandledExceptionEventArgs args)
{
Exception ex = (Exception)args.ExceptionObject;
Logging.LogException(ex);
}
但是如果我从一个方法中throw new UnauthorizedAccessException() 或throw new Exception(),这根本不会捕获它。
MSDN 页面说:
UnhandledExceptionEventArgs 提供对异常对象的访问 和一个标志,指示公共语言运行时是否是 终止。 UnhandledExceptionEventArgs 是参数之一 传递给 UnhandledExceptionEventHandler 的 AppDomain.UnhandledException 事件
我相信我正在做的事情属于 AppDomain(而不是 ThreadException)?我在这里做错了什么?
PS。我试图避免try-catch 块,因为显然it's bad practice。此类库是从定期运行的 Windows 服务调用的,因此我宁愿不要让它“崩溃”以避免由于不可预见的异常而导致内存泄漏,并且更愿意定期监视事件日志。
【问题讨论】:
-
这个方法本身什么都不做。您订阅了 UnhandledException 事件吗?如果您通过阅读链接的问答得出的结论是“使用 try-catch 是不好的做法”,那么您可能需要再次阅读。
-
是的,这就是问题所在。虽然我没有
main方法,但我应该在哪里订阅?至于附件,它用粗体表示。我确实同意它详细说明,但即使答案谈到日志记录,它也会谈到日志记录并允许应用程序崩溃。我正在努力避免这种情况。 -
它说“没有充分的理由”。无论如何,您不应该从类库中执行此操作。如何处理异常取决于消费应用程序。
标签: c# .net exception-handling