[英]How do I display an error message for a GUI app from non-GUI related classes?
我知道我可以使用MessageBox.Show("some error")
類的東西,但我說的是在我的代碼中發生在某個較低級別的錯誤,它沒有業務拋出 MessageBox 或任何其他 GUI 元素。
我正在構建一個 RSS 客戶端,並且我有一個 class 來管理各種提要(比如說FeedManager
),此時它只是一個列表的包裝器。 現在這個 class 調用另一個 class 進行數據訪問。 因此,每當 GUI 中的某個人想要保存提要時,GUI 只需調用FeedManager.SaveFeeds()
來處理提要並將它們保存到文件、數據庫等中。所以我嘗試保存到文件中,但發生了一些不好的事情(要么我編碼的東西或例外)。 所以現在我至少有 3 級深度, GUI
-> FeedManager
-> SomeDataAccessLayer
,我想向用戶顯示一條消息,例如“嘿,找不到該文件”或“您沒有權限寫入那個位置”等...
我應該如何 go 關於這個? 從數據訪問層拋出一個MessageBox
公然將該組件耦合到 GUI。 讓所有方法返回帶有任何錯誤消息的字符串似乎也很愚蠢。
非 GUI 代碼確實不應該顯示 MessageBox。
標准方法是拋出異常。
您的 GUI 應使用 try/catch 塊圍繞對SaveFiles()
的調用並采取適當的操作,例如顯示消息框。
也許你忽略了一點,這正是 Exceptions 的用途:通過(多個)方法調用傳達錯誤。
我的解決方案是使用帶有string
參數的事件,每當發生異常(或任何其他錯誤)時,我都會觸發事件並將消息傳遞給它。
在創建實例的 GUI class 中,只需要注冊到該事件,如果它被觸發,則會彈出一個消息框(或任何其他信息)。
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);
}
}
}
}
也許您可以創建一個新的 class 來處理錯誤,並且 class 將(取決於您的意願)將其打印到控制台,將其顯示在例如公共 static 中,這樣您就可以將其與 GUI 組件解耦,等等。簡單的方法,但仍然在其中顯示消息
您應該拋出異常而不是消息框
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.