2

コンソール アプリケーションがあります。次のコードの塊は、実行する主要部分です。

this.service.Start(args);
Console.WriteLine("Service started; press any key to kill.");
Console.WriteLine();
Console.Read();
this.service.Cease();

ここで重要なのは、コンソール ウィンドウでキーを押すと、サービスがシャットダウンすることです。ただし、ウィンドウの右上にある赤い X を使用してコンソール ウィンドウが「x」されている場合、this.service.Cease()は呼び出されません。

にフックしようとしましたAppDomain.CurrentDomain.ProcessExitが、うまくいかないようでした。代替手段はありますか、それとも行き詰まっていますか?

4

1 に答える 1

0

非表示のウィンドウを表示して終了メッセージを使用できると聞きましたが、それ以外は行き詰まっています。Ctrl+C と Ctrl+Break を正しく動作させることができます:

        using (var waiter = new ManualResetEventSlim())
        {
            Console.TreatControlCAsInput = false;
            Console.CancelKeyPress += (sender, eventArgs) => { waiter.Set(); eventArgs.Cancel = false; };
            Console.WriteLine(@"Press Ctrl+C or Ctrl+Break for a clean exit...");
            waiter.Wait();
            Console.WriteLine("Exiting...");
        }
于 2012-08-30T18:24:03.167 に答える