C# 如何显示来自非GUI相关类的GUI应用程序的错误消息?

C# 如何显示来自非GUI相关类的GUI应用程序的错误消息?,c#,.net,error-handling,C#,.net,Error Handling,我知道我可以使用类似于MessageBox.Show(“某些错误”)的东西,但我所说的错误发生在我的代码的某个较低级别,没有必要抛出MessageBox或任何其他GUI元素 我正在构建一个RSS客户机,我有一个类来管理各种提要(比如说FeedManager),它现在只是一个列表的包装器。现在这个类调用另一个类进行数据访问。因此,每当GUI中有人想要保存提要时,GUI只需调用FeedManager.SaveFeeds(),它会处理提要并将其保存到文件、数据库等。因此,我尝试保存到文件中,但出现了一

我知道我可以使用类似于
MessageBox.Show(“某些错误”)
的东西,但我所说的错误发生在我的代码的某个较低级别,没有必要抛出MessageBox或任何其他GUI元素

我正在构建一个RSS客户机,我有一个类来管理各种提要(比如说
FeedManager
),它现在只是一个列表的包装器。现在这个类调用另一个类进行数据访问。因此,每当GUI中有人想要保存提要时,GUI只需调用
FeedManager.SaveFeeds()
,它会处理提要并将其保存到文件、数据库等。因此,我尝试保存到文件中,但出现了一些不好的情况(我编写的代码或异常)。因此,现在我至少有3个层次的深度,
GUI
->
FeedManager
->
SomeDataAccessLayer
,我想向用户显示一条消息,如“嘿,该文件未找到”或“您没有写入该位置的权限”,等等


我该怎么做?从数据访问层抛出一个
MessageBox
,明显地将该组件耦合到GUI。让所有方法返回带有任何错误消息的字符串似乎也很愚蠢。

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

标准方法是抛出异常

GUI应该在调用
SaveFiles()
时使用try/catch块,并采取适当的操作,如显示Messagebox


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

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

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

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

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


是的,然后这些异常会“冒泡”到UI layerWell,这似乎很容易,我只是认为不应该为每件小事都抛出异常。这实际上为我打开了一个新的问题。。。如果SaveFixes()可以走一条路径,我应该考虑在进入我的函数之前验证的路径还是应该执行一些错误检查并作为异常报告任何错误?@ PETE:验证它。如果你不这样做,那么例外情况只会从几个级别开始,而且信息量可能会更少。
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);
      }
    }
  }
}