2009-09-01 111 views
0

我有一些C#代码使用HttpWebRequest类来拉远程网站。我的错误处理与try/catch语句,但有些错误(如WebRequest类和IOException异常)似乎并没有越来越“中招”与我的方式把它设置:为什么我的异常处理代码没有处理异常?

try 
{ 
    StartScrap("http://www.domain.com"); 
} 
catch (Exception ex) 
{ 
    LogError(ex.ToString(); 
} 


private void StartScrap(string url) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); 

    HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); 

    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     Stream responseStream = response.GetResponseStream(); 
     string responseText = String.Empty; 

     using (StreamReader readerStream = new StreamReader(responseStream, System.Text.Encoding.UTF8)) 
     { 
      responseText = readerStream.ReadToEnd(); <-- I will sometimes get a Webexception error here that won't get caught above and stops the code 
     } 
    } 
} 

更新:还有更多到代码,所以也许它是我发布的代码之外的东西?我基本上在具有NotifyIcon的窗体上的Windows应用程序中使用此代码。我使用Timer类以特定的时间间隔运行代码。这是我如何安装它:

public TrayIcon() 
    { 
     InitializeComponent(); 
    } 

    private void TrayIcon_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      StartScrap("http://www.domain.com"); 
     } 
     catch (Exception ex) 
     { 
      LogError(ex.ToString()); 
     } 
     finally 
     { 
      StartTimer(); 
     } 
    } 

    private void StartTimer() 
    { 
     Timer Clock = new Timer(); 
     Clock.Interval = 600000; 
     Clock.Start(); 
     Clock.Tick += new EventHandler(TrayIcon_Load); 
    } 
+0

这正是启动屏幕刮板的代码吗?如果你在后台线程中运行这个脚本,并且try/catch在主线程中,那么你会得到你得到的结果。 – 2009-09-01 16:23:40

+0

上面的代码在LogError中缺少一个右括号(ex.ToString();(它永远不会编译) – 2009-09-01 16:26:09

回答

3

你是什么意思“停止代码”?你有没有机会在调试器中运行?我的猜测是,如果你在调试器之外运行 - 或者在调试器中再次点击“运行” - 你将进入catch块,没有问题。或者,进入调试器设置并更改调试器在哪一点进入。

当然,如果这个不是发生在调试器中,我们只需要更多关于您所看到的信息。

+0

在调试模式下,它碰到那行代码,但是当它运行时,我得到Windows错误对话框,然后询问如果我想查看详细信息,请继续或取消(希望我有它的截图) – 2009-09-01 16:15:07

+2

LogError必须抛出异常然后 – 2009-09-01 16:15:53

+2

...或者您没有显示真正的代码 – 2009-09-01 16:27:40

2

难道是LogError引发异常吗?

+0

不,因为我不在LogError函数中没有写任何东西,它现在只是它的存根代码。 – 2009-09-01 16:15:39

0

老实说我不知道​​究竟发生,但我会建议你ELMAH去。(错误日志记录模块和处理)

Here是如何为ELMAH一步步。

0

没关系,我发现我调用错误的函数我的Timer类,它绕过事件处理程序。