Asp.NET Tutorials
Home > WinForm应用 > 如何捕捉控制台程序的关闭事件

Hot archives

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

author: 孤熊 | Bear.sTaR{R}
From:  Cnblogs

如何捕捉控制台程序的关闭事件。最近要做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有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;
    }
}
}

Add by : Huobazi (2006-4-07:12:46)