【问题标题】:How do I display an error message for a GUI app from non-GUI related classes?如何显示来自非 GUI 相关类的 GUI 应用程序的错误消息?
【发布时间】:2011-06-08 16:40:37
【问题描述】:

我知道我可以使用 MessageBox.Show("some error") 之类的东西,但我说的是在我的代码中某个较低级别发生的错误,该错误与折腾 MessageBox 或任何其他 GUI 元素无关。

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

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

【问题讨论】:

    标签: c# .net error-handling


    【解决方案1】:

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

    标准方法是抛出异常。

    您的 GUI 应该使用 try/catch 块包围对 SaveFiles() 的调用并采取适当的操作,例如显示消息框。

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

    【讨论】:

    • 是的,然后那些异常“冒泡”到 UI 层
    • 嗯,这似乎很容易,我只是认为不应该为每件小事都抛出异常。这实际上为我打开了一个新问题......如果 SaveFiles() 可以采用路径,我应该考虑在它进入我的函数之前验证该路径还是应该执行一些错误检查并将任何错误报告为异常?
    • @Pete:验证它。如果你不这样做,例外只会来自几个级别,并且可能信息较少。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        对此我的解决方案是使用带有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);
              }
            }
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-06-28
          • 2015-06-10
          • 2011-05-05
          • 2010-09-05
          • 1970-01-01
          • 2017-02-25
          • 2011-05-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多