【发布时间】:2020-12-21 00:44:23
【问题描述】:
我正在尝试实现一个全局“try catch 块”并在处理完任何内容后保持我的应用程序运行:
public class GlobalExceptionHandler
{
public GlobalExceptionHandler()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
throw (e.ExceptionObject as Exception);
}
catch (Exception ex)
{
}
}
}
问题:
- 我希望使用
trycatch块以熟悉的方式处理所有异常。我把它们扔回去抓是不是做错了什么? - 上面的代码仍然丢弃了应用程序,并在最初抛出异常的地方弹出异常,就像它没有被处理一样。
- 猜我的方法从一开始就完全失败了。我想避免在整个应用程序中使用大量
trycatch块,并决定本地化所有异常处理。这个想法有多好?我应该找到更好的方法来实现全局处理程序还是坚持使用数十个trycatch块?
【问题讨论】:
-
处理意外异常应该不会很麻烦。如果您有很多
try/catch块,则听起来其余代码中的验证可能存在问题。如果您验证公共方法中的参数,然后处理预期的异常(您知道如何从中恢复),那么您应该让任何其他异常冒泡,以便您知道它们是什么并且可以添加逻辑来处理它们。 -
一个空的
catch块会吞下所有的异常,所以当你从trythrow然后吞下catch中的异常时,什么都不会发生。 -
1.我也想处理预期的。然后根据发生的异常类型在状态栏组件中设置通知。所有这些都集中在一个地方。 2.应用程序在到达处理程序的异常上崩溃,而不是在处理程序内重新抛出的异常上
标签: c# winforms design-patterns