簡體   English   中英

如何顯示來自非 GUI 相關類的 GUI 應用程序的錯誤消息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM