2010-01-10 17 views
0

我使用C#創建了一個簡單的控制檯應用程序。它創建一個類的實例並調用其中一個類的方法。此方法包含一個try-catch塊來捕獲System.Net.WebException類型的異常並重新拋出它,以便主方法可以捕獲它並採取適當的行動。當我執行已編譯的應用程序時,異常不會傳遞給主類,並且用戶永遠不會看到我的自定義錯誤消息。相反,這個屏幕上彈出,告訴我,有未處理的引發WebException(這是在德國,但我認爲它可以無論如何被識別;-)):.NET異常不會從類傳遞到主程序

alt text http://img29.imageshack.us/img29/4581/crapq.png

這是我的一個名爲BuffaloRouter類中的方法:

public void Login() 
    { 
     string sUrl = _sUrl + "/somestuff.htm"; 
     HttpWebRequest request = (HttpWebRequest) WebRequest.Create(sUrl); 
     CredentialCache credCache = new CredentialCache(); 
     credCache.Add(new Uri(sUrl), "Basic", _credential); 
     request.Credentials = credCache; 

     try 
     { 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream receiveStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); 
      _sContent = reader.ReadToEnd(); 

      response.Close(); 
      receiveStream.Dispose(); 
      reader.Dispose(); 

      _parseSessionIds(); 
     } 
     catch (WebException) 
     { 
      throw; 
     } 
    } 

這是我的主類中的方法:

private static bool _login() 
    { 
     _router = new BuffaloRouter(_sIP, new System.Net.NetworkCredential("root", _sPassword)); 

     try 
     { 
      Console.WriteLine("Login..."); 
      _router.Login(); 
      return true; 
     } 
     catch (System.Net.WebException) 
     { 
      _showErrorMessage("Could not connect to " + _sIP); 
      return false; 
     } 
    } 

更新: 我覺得更比有點尷尬,寧可不談論它。但是在我沒有看到自己正在做的事情之前,有好幾次---) 當我運行應用程序時,主類內部的方法甚至沒有被調用。被調用的那個沒有try-catch塊,這樣在我們的類的方法中拋出的異常使應用程序按照它應該做的那樣做,即CRASH! 我很愚蠢,很抱歉浪費白天的時間。

+0

我不熟悉的錯誤對話框。翻譯可能會幫助您獲得更好/更快的答案。 – Aaronaught

+0

該對話框基本上聲明應用程序不再工作,併爲我提供了一些選項,用於在線查找解決方案,關閉應用程序或進行調試。 – bitfrickler

+0

我更新了我的帖子。 – bitfrickler

回答

4

如果你正在做的是重新拋出異常,那麼你不需要首先捕獲它。只需從Login方法中刪除try...catch即可。

完成後,暫時編輯您的代碼以捕獲一般異常並調試它以找出實際引發的異常。完成後,再次編輯代碼以捕獲該異常(以及單獨的異常)。

1

正如ChrisF所示,您不需要重新拋出Login方法中的錯誤。如果你的catch塊沒有在_login方法中運行,那麼我猜你沒有捕捉到正確的異常。

你肯定你獲得一個System.Net.WebException

相關問題