2011-07-25 37 views
3

我正在編寫一個控制檯應用程序作爲計劃任務運行,並且當您使用關閉按鈕關閉它時,它似乎不會執行運行代碼的finally代碼塊。我試圖複製具有以下非常簡單的控制檯應用程序,此行爲:C#控制檯應用程序最後沒有調用

using System; 
using System.Threading; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       Thread.Sleep(60000); 
      } 
      finally 
      { 
       Console.WriteLine("Finally"); 
      } 
     } 
    } 
} 

當通過調試運行,這並不在Console.WriteLine行遇到斷點。我不確定這個簡單的測試是否按預期工作,或者爲什麼finally塊不會在這個測試或我的生產代碼中運行。

我以爲終於塊總是運行(是不是他們的全部?)。這裏發生了什麼?

+0

事實證明,我需要做的就是在這個答案使用的代碼: http://stackoverflow.com/questions/474679/capture-console-exit-c/474743#474743 –

回答

6

終止塊將總是運行,除非進程本身突然終止 - 這是發生在這裏。它不像Thread.Sleep拋出一個異常,並且堆棧正常展開 - 整個過程正在中止。至少據我所知:)

+0

@Mitch:不確定 - 這對我來說是新的。 –

+0

@Jon:在關閉按鈕點擊時是否有任何明智的方法可以正常關閉(例如釋放非託管資源)? –

+0

@Jackson:在這種情況下我什麼都不知道 - 可能有些事情,但我不知道。 –