注重:在VS中调试执行时,在处置惩罚顺序例程中设置断点,不会中断;会提醒:无可用源,如下图:
完全示例代码:
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; /************************************************************************/ /* CSharp_Win32控制台应用顺序疏忽 Ctrl + C * Powered by:testcs_dn * Blog:http://www.ki4.cn/ */ /************************************************************************/ namespace CSharp_Win32控制台应用顺序疏忽CtrlC { //定义处置惩罚顺序托付 public delegate bool ConsoleCtrlDelegate(int ctrlType); class Program { //导入SetCtrlHandlerHandler API [DllImport("kernel32.dll")] private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); //当用户封闭Console时,体系会发送次音讯 private const int CTRL_CLOSE_EVENT = 2; //Ctrl+C,体系会发送次音讯 private const int CTRL_C_EVENT = 0; //Ctrl+break,体系会发送次音讯 private const int CTRL_BREAK_EVENT = 1; //用户退出(注销),体系会发送次音讯 private const int CTRL_LOGOFF_EVENT = 5; //体系封闭,体系会发送次音讯 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) //装置事宜处置惩罚失利 { Console.WriteLine("error"); while (true) { Console.WriteLine("..."); Thread.Sleep(1000); } } else { Console.WriteLine("ok"); while (true) { Console.WriteLine("..."); Thread.Sleep(1000); } } } /// <summary> /// 处置惩罚顺序例程,在这里编写对指定事宜的处置惩罚顺序代码 /// 注重:在VS中调试执行时,在这里设置断点,但不会中断;会提醒:无可用源; /// </summary> /// <param name="CtrlType"></param> /// <returns></returns> private static bool HandlerRoutine(int ctrlType) { switch(ctrlType) { case CTRL_C_EVENT: Console.WriteLine("C"); return true; //这里返回true,示意阻挠相应体系对该顺序的操纵 //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;//示意阻挠相应体系对该顺序的操纵 return false;//疏忽处置惩罚,让体系举行默许操纵 } } }
以上就是C# Win32控制台应用顺序疏忽Ctrl + C阻挠顺序退出的代码示例(图)的细致内容,更多请关注ki4网别的相干文章!