控制台窗口关闭时是否可以订阅事件?

时间:2012-08-30 18:00:29

标签: c# .net events console-application

我有一个控制台应用程序;下面的代码块是执行的主要部分:

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

此处的关键是在控制台窗口中按下某个键后服务将关闭。但是,如果控制台窗口使用窗口右上角的红色X'x'd,则永远不会调用this.service.Cease()

我尝试连接到AppDomain.CurrentDomain.ProcessExit,但似乎没有用。有没有其他选择,还是我被卡住了?

1 个答案:

答案 0 :(得分: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...");
        }