C # The Win32 console application ignores Ctrl + C and stops the program from exiting,

Source: Internet
Author: User

C # The Win32 console application ignores Ctrl + C and stops the program from exiting,

C # In the Win32 console, the application ignores Ctrl + C and stops the program from exiting. The Windows API SetConsoleCtrlHandler function is used here.

Note: When debugging and executing in VS, set a breakpoint in the processing program routine without interruption. A prompt is displayed, such:

Complete sample code:

 

?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;using System.Runtime.InteropServices;using System.Threading; /************************************************************************//* The CSharp_Win32 console application ignores Ctrl + C * Powered by:testcs_dn * Blog:http://blog.csdn.net/testcs_dn *//************************************************************************/The namespace CSharp_Win32 console application ignores CtrlC{    // Define the handler delegate    public delegate bool ConsoleCtrlDelegate(int ctrlType);     class Program    {        // Import SetCtrlHandlerHandler API        [DllImport("kernel32.dll")]        private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);        // When the user closes the Console, the system sends a message.        private const int CTRL_CLOSE_EVENT = 2;        // Ctrl + C, the system will send the message        private const int CTRL_C_EVENT = 0;        // Ctrl + break, the system will send the message        private const int CTRL_BREAK_EVENT = 1;        // Log out (logout) and the system sends the message        private const int CTRL_LOGOFF_EVENT = 5;        // When the system is disabled, the system sends a message.        private const int CTRL_SHUTDOWN_EVENT = 6;         static void Main(string[] args)        {            Program cls = new Program();            //Console.ReadKey();        }        public Program()        {            ConsoleCtrlDelegate consoleDelegete = new ConsoleCtrlDelegate(HandlerRoutine);             bool bRet = SetConsoleCtrlHandler(consoleDelegete, true);            if (bRet == false) // An error occurred while handling the installation event.            {                Console.WriteLine("error");                while (true)                {                    Console.WriteLine("...");                    Thread.Sleep(1000);                }            }            else            {                Console.WriteLine("ok");                while (true)                {                    Console.WriteLine("...");                    Thread.Sleep(1000);                }            }         }         /// <summary>        /// Processing program routine, where you can compile the processing program code for the specified event        /// Note: When debugging and executing in VS, set a breakpoint here, but it will not be interrupted; a prompt will be displayed: no available source;        /// </summary>        ///<param name="CtrlType">        /// <returns></returns>        private static bool HandlerRoutine(int ctrlType)        {            switch(ctrlType)            {                case CTRL_C_EVENT:                    Console.WriteLine("C");                    return true; // Returns true, which indicates that the system is blocked from performing operations on the program.                    //break;                case CTRL_BREAK_EVENT:                    Console.WriteLine("BREAK");                    break;                case CTRL_CLOSE_EVENT:                    Console.WriteLine("CLOSE");                    break;                case CTRL_LOGOFF_EVENT:                    Console.WriteLine("LOGOFF");                    break;                case CTRL_SHUTDOWN_EVENT:                    Console.WriteLine("SHUTDOWN");                    break;            }            // Return true; // indicates that the system is blocked from performing operations on the program.            return false;// Ignore and allow the system to perform default operations        }    }}

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.