C#控制台程序中处理2个关闭事件的代码实例
应用场景
我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭。如果我们不希望用户通过Ctrl+C终止我们的程序,就需要对Ctrl+C或关闭事件作处理。
处理方法
在.net平台下Console类有个CancelKeyPress事件可以处理Ctrl+C,不过对于直接关闭控制台应用,这种处理就无能为力了。
不过WindowsAPI中有个SetConsoleCtrlHandler函数可以处理这两种关闭事件。
C#处理代码如下:
staticclassProgram { publicdelegateboolControlCtrlDelegate(intCtrlType); [DllImport("kernel32.dll")] privatestaticexternboolSetConsoleCtrlHandler(ControlCtrlDelegateHandlerRoutine,boolAdd); privatestaticControlCtrlDelegatecancelHandler=newControlCtrlDelegate(HandlerRoutine);
publicstaticboolHandlerRoutine(intCtrlType) { switch(CtrlType) { case0: Console.WriteLine("0工具被强制关闭");//Ctrl+C关闭 break; case2: Console.WriteLine("2工具被强制关闭");//按控制台关闭按钮关闭 break; } Console.ReadLine(); returnfalse; }
///<summary> ///应用程序的主入口点。 ///</summary> [STAThread] staticvoidMain(string[]args) { SetConsoleCtrlHandler(cancelHandler,true); Console.ReadLine(); } }