发新话题
打印

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

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

  如何捕捉控制台程序的关闭事件。最近要做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有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")]
** static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine,bool Add);
//当用户关闭Console时,系统会发送次消息
** 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>
   ** static bool HandlerRoutine(int CtrlType)
   {
switch(CtrlType)
{
  case CTRL_CLOSE_EVENT:       //用户要关闭Console了
   Debug.WriteLine("Close");
   break;
}
return false;
    }
}
}

TOP

发新话题