如果你想捕获关闭动作可以从两方面进行
一是捕获键盘的 ctrl+c 组合键
二是用win32 api捕获,可以参考下面的链接内容
http://www.cnblogs.com/birdshover/archive/2008/03/17/1110138.html
这个,利用Windows API 拦截Console的手动关闭事件的消息,来实现,下面我给出的是一个完整的事例:
using Systemusing System.Collections.Generic
using System.Text
namespace ExtendedConsoleApp
{
using System.Runtime.InteropServices
/// <summary>
/// Author: DeltaCat
/// Purpose: 自定义控制台关闭事件
/// Date: 2013-4-5
/// </summary>
class Program
{
delegate bool ConsoleCtrlDelegate(int dwCtrlType)
const int CTRL_CLOSE_EVENT = 2
[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add)
static void Main(string[] args)
{
ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine)
if (SetConsoleCtrlHandler(newDelegate, true))
{
#region 任务代码区
//这里执行你自己的任务,我举例输出几个数字,为了展示长时间的任务,我用了Sleep
Console.WriteLine("1")
System.Threading.Thread.Sleep(5000)
Console.WriteLine("2")
System.Threading.Thread.Sleep(2000)
Console.WriteLine("Over, 2秒后退出")
System.Threading.Thread.Sleep(2000)
#endregion
}
else
{
Console.WriteLine("抱歉,API注入失败,按任意键退出!")
Console.ReadKey()
}
}
static bool HandlerRoutine(int CtrlType)
{
switch (CtrlType)
{
case CTRL_CLOSE_EVENT: //用户要关闭Console了
Console.WriteLine()
Console.WriteLine("任务还没有完成,确认要退出吗?(Y/N)")
ConsoleKeyInfo ki = Console.ReadKey()
return ki.Key == ConsoleKey.Y
default:
return true
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)