如何捕捉控制台程序的关闭事件

 做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有WinForm的Closing或Closed事件,想想只能用API才捕捉消息来实现了,代码如下:

using System; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; namespace ConsoleColsed { public delegate bool ConsoleCtrlDelegate(int dwCtrlType); public class ClsMain { [DllImport("kernel32.dll")] private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); //当用户关闭Console时,系统会发送次消息 private const int CTRL_CLOSE_EVENT = 2; [STAThread] static void Main() { ClsMain cls = new ClsMain(); } public ClsMain() { // 用API安装事件处理 ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine); bool bRet = SetConsoleCtrlHandler(newDelegate, true); if (bRet == false) //安装事件处理失败 { Debug.WriteLine("失败"); } else { Console.WriteLine("ok"); Console.Read(); } } /// <summary> /// 处理消息的事件 /// </summary> private static bool HandlerRoutine(int CtrlType) { switch (CtrlType) { case CTRL_CLOSE_EVENT: //用户要关闭Console了 Debug.WriteLine("Close"); break; } return false; } } }

你可能感兴趣的:(api,Class,WinForm)