4

スケジュールされたタスクとして実行するコンソール アプリを作成していますが、閉じるボタンを使用して閉じると、実行中のコードの finally ブロックが実行されないようです。次の非常に単純なコンソール アプリを使用して、この動作を再現しようとしました。

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 ブロックが実行されないように見えるかはわかりません。

私は、finally ブロックは常に実行されると考えていました (それがブロックの要点ではありませんか?)。ここで何が起こっているのですか?

4

2 に答える 2

6

プロセス自体が突然終了しない限り、 finally ブロックは常に実行されます。これがここで起こっていることです。例外をスローしているわけではなくThread.Sleep、スタックが正常に巻き戻されています。プロセス全体が中止されているだけです。少なくとも私が知る限り:)

于 2011-07-25T08:17:14.403 に答える
2

私がする必要があったのは、この回答からコードをコピーすることでした: Capture console exit C#

于 2011-07-25T08:40:04.553 に答える