为什么我的.NET控制台应用程序在等待Ctrl-C

时间:2018-04-24 00:03:00

标签: c# multithreading console

我正在构建一个简单的控制台应用程序来启动计时器并执行一些操作。如果用户按下Ctrl-C,我想关闭。

当我对其进行编码时,应用程序会检测到Ctrl-C,但随后挂起并永不关闭。我做错了什么?

以下是代码:

using System;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        private static readonly AutoResetEvent _closeEvent = new AutoResetEvent(false);

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World - waiting for Ctrl-C");

            Console.CancelKeyPress += (sender, eventArgs) =>
            {
                Console.WriteLine("Got the Ctrl-C");
                _closeEvent.Set();
            };

            // Start up a timer and do work here...

            Console.WriteLine("Before WaitOne");
            _closeEvent.WaitOne();
            Console.WriteLine("After WaitOne");
        }
    }
}

我想知道这是否只是Visual Studio调试器的副作用?如果我在没有调试的情况下运行它然后按Ctrl-C,控制台会显示"按任意键继续......"然后按一个键然后终止该应用程序。

1 个答案:

答案 0 :(得分:3)

似乎完成这项工作的关键是设置

eventArgs.Cancel = true;

CancelKeyPress处理程序内。

这一切都很好用,应用程序正确终止。