【问题标题】:Exit Application On Error in a C # Library在 C# 库中出现错误时退出应用程序
【发布时间】:2010-11-11 08:13:01
【问题描述】:

我承认这是一个愚蠢的问题。因此,如果这浪费了您的时间,我们深表歉意,但我无法找到解决方案。

具有类库的 WinForm 应用程序。我使用 Log4Net dll 记录信息。

在 Button_Click 上,我调用了类库中可能引发错误的函数。所以,我在 try-catch-finally 块中有函数的内容。在 catch 中,我编写了日志语句(使用 Log4Net dll)。

现在,发生了错误,我希望向 UI 显示一条消息。在显示一条消息后,我希望它退出。

如何将控件从类库的 catch 块传递回表单代码,以便显示一条消息然后退出?

【问题讨论】:

    标签: winforms exception-handling error-handling exit


    【解决方案1】:

    在类库的异常处理程序中记录错误后,只需在不带任何参数的情况下调用throw,它就会使用相同的调用堆栈等重新抛出完全相同的异常。

    然后让你的表单捕获它并按照你的意愿处理它。

    【讨论】:

      【解决方案2】:

      在类库方法中,在catch中,重新抛出异常,让它可以冒泡到表单中。

      在 Button_Click 形式中,将 Class Method 调用包装在 try catch 中,并在 catch 中显示消息并退出。

      【讨论】:

        【解决方案3】:

        库应该在记录异常后重新抛出异常。

        class Form 
        {
            OnClick() 
            {
                try
                {
                    library.Routine();
                }
                catch(Exception e)
                {
                    // messagebox
                    // exit
                }
            }
        }
        
        class Library 
        {
            public void Routine() 
            {
                try
                {
                    // stuff
                }
                catch(Exception e)
                {
                    logger.error("error in routine", e);
                    throw;
                }
            }
        }
        

        【讨论】:

        • 谢谢!让我们假设我有两个层次。窗体调用 ClassLibrary1,后者调用 ClassLibrary2。如果我要在 ClassLibrary2 中记录错误,那么在 ClassLibrary1 中,我只能在 ClassLibrary1 的 Catch 块中抛出而不做任何记录。
        • @Magic。我认为这会奏效,这完全取决于你。我的大多数项目都有多个级别的日志记录。我尝试在大多数地方合理地组织它,以便大多数时候我的异常只记录一次。但是,在许多情况下,我宁愿冒一点冗余日志记录的风险,而不是根本没有任何日志记录的机会,所以我有时最终会记录两次异常,有时甚至是 3 次。就像我说的,我尽量避免它,但这真的取决于谁在使用这些库以及用于什么目的。
        猜你喜欢
        • 2021-03-26
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 2016-11-12
        • 1970-01-01
        • 2012-02-22
        相关资源
        最近更新 更多