在Windows 7中捕获控制台退出C#

sam*_*mwa 5 .net c# console events exit

有没有人知道如何在Windows中的c#中的控制台中对ctrl + c事件作出反应?

这个问题:Capture控制台退出C#说明了怎么做,但我已经尝试过,它只捕获当用户单击控制台窗口顶部的关闭X时的事件.

当用户键入ctrl + c时没有任何反应,它甚至在调试时都没有命中处理程序.

谢谢

这是我的代码

namespace EventCloseConsole
{
    using System.Runtime.InteropServices;
    using System;

    class Program
    {
        [DllImport("Kernel32")]
        private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add);

        private delegate bool EventHandler(CtrlType sig);
        static EventHandler _handler;

        enum CtrlType
        {
            CTRL_C_EVENT = 0,
            CTRL_BREAK_EVENT = 1,
            CTRL_CLOSE_EVENT = 2,
            CTRL_LOGOFF_EVENT = 5,
            CTRL_SHUTDOWN_EVENT = 6
        }

        private static bool Handler(CtrlType sig)
        {
            switch (sig)
            {
                case CtrlType.CTRL_C_EVENT:
                case CtrlType.CTRL_LOGOFF_EVENT:
                case CtrlType.CTRL_SHUTDOWN_EVENT:
                case CtrlType.CTRL_CLOSE_EVENT:

                    Console.WriteLine("Closing");
                    System.Threading.Thread.Sleep(500);
                    return false;
                default:
                    return true;
            }
        }

        static void Main(string[] args)
        {

            _handler += new EventHandler(Handler);
            SetConsoleCtrlHandler(_handler, true);
            Console.ReadLine();


        }
    }
}
Run Code Online (Sandbox Code Playgroud)

awr*_*t18 1

您需要将 Console.CancelKeyPress 事件连接到处理程序。 是一篇关于该主题的精彩文章。