如何从非GUI相关类中显示GUI应用程序的错误消息?

时间:2011-06-08 16:40:37

标签: c# .net error-handling

我知道我可以使用像MessageBox.Show("some error")这样的东西,但我说的是在我的代码中某个较低级别发生的错误,没有任何业务折腾MessageBox或任何其他GUI元素。

我正在构建一个RSS客户端,我有一个管理各种源的类(比如说FeedManager),这只是列表的包装器。现在这个类调用另一个类进行数据访问。因此,当GUI中的某个人想要保存源时,GUI只需调用FeedManager.SaveFeeds()来处理源并将它们保存到文件,数据库等。所以我尝试保存到文件中,发生了一些不好的事情(要么我编写的东西或例外)。所以现在我至少有3级,GUI - > FeedManager - > SomeDataAccessLayer,我想向用户显示一条消息,例如“嘿,找不到该文件”或“您没有权限写入该位置”等等...

我应该怎么做?从数据访问层投掷MessageBox公然将该组件耦合到GUI。让所有方法返回带有任何错误消息的字符串似乎也很愚蠢。

4 个答案:

答案 0 :(得分:2)

非GUI代码确实不应该显示MessageBox。

标准方法是抛出异常。

您的GUI应该使用try / catch块围绕对SaveFiles()的调用,并采取相应的操作,例如显示Messagebox。

也许你忽略了这一点,这正是Exceptions的用途:通过(多个)方法调用传递错误。

答案 1 :(得分:0)

也许您可以创建一个处理错误的新类,该类将(根据您的意愿)将其打印到控制台,将其显示在例如一个公共静态GUI组件等。这样你就可以轻松地将它与GUI分离,但仍然在其中显示消息

答案 2 :(得分:0)

您应该抛出异常而不是消息框

答案 3 :(得分:0)

我的解决方案是使用带有string参数的事件,每当发生异常(或任何其他错误)时,我都会触发事件并将消息传递给它。

在创建实例的GUI类中,只需要注册该事件,万一被触发,弹出一个消息框(或任何其他信息)。

namespace XXX {
  public delegate void Error(string a_sErrorMessage);

  public class XXX {

    public event Error OnError;

    public void Test() {

      try {
        // Do something
      } catch (Exception ex) {
        // Trigger the event
        OnError(ex.Message);
      }
    }
  }
}