2010-01-10 2 views
0

C#을 사용하여 간단한 콘솔 응용 프로그램을 만들었습니다. 클래스의 인스턴스를 생성하고 클래스의 메소드 중 하나를 호출합니다. 이 메서드에는 try-catch 블록이 포함되어 System.Net.WebException 형식의 예외를 catch하고 주 메서드가 catch하고 적절히 작동 할 수 있도록 다시 throw합니다. 컴파일 된 응용 프로그램을 실행할 때 예외가 주 클래스로 전달되지 않고 사용자가 내 사용자 지정 오류 메시지를 볼 수 없습니다..NET 예외가 클래스에서 주 프로그램으로 전달되지 않습니다.

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

이 내 클래스라는 이름의 BuffaloRouter 내부의 방법 : 대신이 화면 처리되지 않은 WebException이을 (그것은 독일어의하지만 어쨌든 인식 될 수 있다고 생각 ;-))가 있다고 말해 팝업

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; 
     } 
    } 

가 UPDATE : 내가 더 기분이 보다 조금 당황스럽고 오히려 그것에 대해 말하지 않을 것입니다. 하지만 몇 시간 전에 내가 뭘하는지에 의존하지 않았다 ;-) 앱을 실행할 때 메인 클래스 내부의 메소드가 호출되지 않았다. 호출 된 클래스에는 try-catch 블록이 없으므로 내 클래스의 메서드에서 throw 된 예외로 인해 응용 프로그램이 정상적으로 수행됩니다 (예 : CRASH !!). 나는 바보입니다. 영원히 시간을 낭비해서 죄송합니다.

+0

를 받고. 번역을하면 더 빠르고 더 빨리 답변을 얻을 수 있습니다. – Aaronaught

+0

대화 상자는 기본적으로 응용 프로그램이 더 이상 작동하지 않으며 온라인에서 솔루션을 찾거나 응용 프로그램을 닫거나 디버깅 할 수있는 옵션을 제공합니다. – bitfrickler

+0

내 게시물이 업데이트되었습니다. – bitfrickler

답변

4

예외를 모두 다시 시도하는 경우 먼저 예외를 catch 할 필요가 없습니다. Login 방법에서 try...catch을 삭제하면됩니다.

코드를 일시적으로 편집 한 다음 일반 예외를 catch하고 디버그하여 실제로 어떤 예외가 발생했는지 확인하십시오. 이 코드를 다시 편집하면 해당 예외 (예외 만 포함)를 catch 할 수 있습니다.

1

ChrisF가 명시한대로 Login 방법으로 오류를 다시 제기 할 필요가 없습니다. catch 블록이 _login 메소드에서 실행되고 있지 않으면 올바른 예외를 포착하지 못했을 것입니다.

는 긍정적 인 당신 내가 그 오류 대화 상자에 익숙하지 않은 해요 System.Net.WebException