2

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

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

这里的关键是在控制台窗口中按下一个键后服务会关闭。但是,如果控制台窗口使用窗口右上角的红色 X 'x'd out,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 回答