2012-01-25 23 views
2

時引發的捕獲異常對於.NET新來說,我想知道爲什麼這段代碼仍然會引發未處理的異常。在調用Application.DoEvents()

try 
{ 
    Application.DoEvents(); 
} 
catch 
{ 
} 

有沒有人有任何想法? 此代碼在事件處理程序中調用。它拋出NullReferenceException。有趣的是,當我試圖在代碼之前放置一個斷點時,異常不會被拋出。只有當我讓代碼連續運行時纔會發生異常。

+1

您所顯示的代碼中只有兩個構造,並且**都是不正確的**。如果你是.NET新手,你顯然做錯了。永遠不要編寫看起來像這樣的代碼。 –

+0

http://www.codinghorror.com/blog/2005/08/is-doevents-evil-revisited.html你確實看過這個:) –

+0

你能澄清一下嗎?事情是,這不是我的代碼。這是其他人的代碼,我不確定他在這裏做什麼。雖然代碼有問題,但是catch塊不應該能夠處理將在try塊內拋出的「all」異常嗎? –

回答

1

並非所有例外都是可捕獲的。您沒有告訴我們您看到什麼異常,但請注意StackOverflowExceptionExecutionEngineException永遠不會被抓到。我知道前者可能發生在Application.DoEvents(通常在System.Drawing),但我不確定後者。

無論如何,你的代碼是邪惡的。不要吞食例外。這意味着你正在吞噬錯誤。

一般情況下,儘量避免Application.DoEvents。有可能發生的真正令人討厭的重入問題。

0

注意使用Application.DoEvents(),大部分時間用於錯誤的事情,比如更新時間支出流程中的進度條,這可以通過異步編程完成。 您無法捕捉所有例外,請告訴我們正在引發什麼異常。

0

也可能是當你運行沒有斷點的應用程序時,DoEvents允許執行另一段代碼,並且段的代碼會拋出異常。

您應該檢查異常的StackTrace以查看它指向的位置(或者在此處發佈堆棧跟蹤,我們可以查看它)。如果是這種情況,當使用斷點和步進時可能不會看到異常,因爲DoEvents和線程不會以相同的方式觸發。

如果在DoEvents期間從其他地方拋出異常,這也將解釋爲什麼即使上面的代碼試圖破壞任何異常,您仍然得到未處理的異常。

相關問題