bool Add); private static ControlCtrlDelegate cancelHandler

时间:2022-04-18 08:18:19

我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接*。如果我们不但愿用户通过Ctrl+C终止我们的措施,就需要对Ctrl+C或*事件作措置惩罚惩罚。


措置惩罚惩罚要领

在.net平台下Console类有个CancelKeyPress事件可以措置惩罚惩罚Ctrl+C,不过对付直接*控制台应用,这种措置惩罚惩罚就无能为力了。

不过Windows API中有个SetConsoleCtrlHandler函数可以措置惩罚惩罚这两种*事件。

C#措置惩罚惩罚代码如下:


代码如下:


static class Program

{

public delegate bool ControlCtrlDelegate(int CtrlType);

[DllImport(“kernel32.dll”)]

private static extern bool SetConsoleCtrlHandler(ControlCtrlDelegate HandlerRoutine, bool Add);

private static ControlCtrlDelegate cancelHandler = new ControlCtrlDelegate(HandlerRoutine);

public static bool HandlerRoutine(int CtrlType)

{

switch (CtrlType)

{

case 0:

Console.WriteLine(“0工具被强制*”); //Ctrl+C*

break;

case 2:

Console.WriteLine(“2工具被强制*”);//按控制台*按钮*

break;

}

Console.ReadLine();

return false;

}

/// <summary>

/// 应用措施的主入口点。

/// </summary>

[STAThread]

static void Main(string[] args)

{

SetConsoleCtrlHandler(cancelHandler, true);

Console.ReadLine();

}

}

除声明外,,跑步客文章均为原创,转载请以链接形式标明本文地点
  

本文地点:  






相关内容