ホームページ >バックエンド開発 >C#.Net チュートリアル >C# Win32 コンソール アプリケーションは Ctrl + C を無視して、プログラムがコード例を終了しないようにします (図)
C# Win32 コンソール アプリケーションは Ctrl + C を無視し、プログラムの終了を防ぎます。ここでは Windows API SetConsoleCtrlHandler 関数が使用されます。
注: 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.php.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 を無視して、プログラムがコード例を終了しないようにします (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。