2011-07-25 11 views
3

私はスケジュールされたタスクとして実行するコンソールアプリケーションを作成していますが、クローズボタンを使用して閉じるときに実行中のコードのfinallyブロックを実行するようには見えません。デバッガを介して実行すると、これはConsole.WriteLine行にブレークポイントにヒットしませんC#コンソールアプリケーションが最終ブロックを呼び出さない

using System; 
using System.Threading; 

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

:私は、次の非常に単純なコンソールアプリケーションでこの動作を再現しようとしました。この単純なテストが意図したとおりに動作するのか、なぜfinallyブロックがこのテストまたは私のプロダクションコードで動作しないように見えるのか分かりません。

私はついにブロックを考えましたいつもが実行されていますか?ここで何が起こっているのですか?

+0

それは私が何をする必要があるかが判明し、この答えでコードを使用しています: http://stackoverflow.com/questions/474679/capture-console-exit-c/474743#474743 –

答えて

6

最後にブロック常にが実行されますが、プロセス自体が突然終了しない限り、ここでは何が起きていますか。 Thread.Sleepが例外をスローしているのではなく、スタックが正常に解放されているというわけではありません。プロセス全体が中断されているだけです。少なくとも私の知る限り:)

+0

@Mitch:それについてはわかりません。それは私には新しいものです。 –

+0

@ジョン:クローズボタンをクリックして正常に閉じる(管理されていないリソースを解放するなど)賢明な方法はありますか? –

+0

@ジャックソン:私はこの場合何も知らない - 何かがあるかもしれないが、私はそれを認識していない。 –

1

をそれは私が行うために必要なものが判明し、この答えからコードをコピーしました:Capture console exit C#

関連する問題