我知道我可以使用像MessageBox.Show("some error")
这样的东西,但我说的是在我的代码中某个较低级别发生的错误,没有任何业务折腾MessageBox或任何其他GUI元素。
我正在构建一个RSS客户端,我有一个管理各种源的类(比如说FeedManager
),这只是列表的包装器。现在这个类调用另一个类进行数据访问。因此,当GUI中的某个人想要保存源时,GUI只需调用FeedManager.SaveFeeds()
来处理源并将它们保存到文件,数据库等。所以我尝试保存到文件中,发生了一些不好的事情(要么我编写的东西或例外)。所以现在我至少有3级,GUI
- > FeedManager
- > SomeDataAccessLayer
,我想向用户显示一条消息,例如“嘿,找不到该文件”或“您没有权限写入该位置”等等...
我应该怎么做?从数据访问层投掷MessageBox
公然将该组件耦合到GUI。让所有方法返回带有任何错误消息的字符串似乎也很愚蠢。
答案 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);
}
}
}
}