当前位置:  编程技术>.net/c#/asp.net

C#控制台程序中处理2个关闭事件的代码实例

    来源: 互联网  发布时间:2014-11-04

    本文导语:  应用场景 我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭。如果我们不希望用户通过Ctrl+C终止我们的程序,就需要对Ctrl+C或关闭事件作处理。 处理方法 在.net平台下Console类有个CancelKeyPress事件...

应用场景

我们开发的控制台应用,在运行阶段很有可能被用户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;
    } 

    ///
    /// 应用程序的主入口点。
    ///
    [STAThread]
    static void Main(string[] args)
    {
        SetConsoleCtrlHandler(cancelHandler, true);
        Console.ReadLine();
    }
}


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问如何实现控制台下输入但是控制台不回显(说白了就是怎样写控制台程序的密码输入部分)
  • 1、linux下一个虚拟控制台北我弄死了怎么重启?2、如果所有的虚拟控制台都被我弄死了,是不是就完蛋了?
  • 如何控制printk信息写往哪些控制台?
  • 如何实现启动一个带控制台的目标程序
  • 怎样能使linux在控制台中显示中文?
  • linux下如何修改控制台字体?
  • linux 控制台
  • 终端、终端设备、控制台到底有什么区别和联系?(在线等,急!)
  • 如何将程序输出的结果重定向到另外的控制台
  • 彩色控制台输出库 Logapp
  • 请问怎样从命令控制台返回到xwindow?
  • 控制台输出彩色文字 Jansi
  • 图形界面控制台 Gogodroid
  • 在Linux控制台中,Ctrl+S代表什么?如何禁止它?
  • 请教如何在red hat的文本虚拟控制台中显示中文
  • 论坛 iis7站长之家
  • 如何判断当前屏幕在使用的是哪个终端或者是控制台?
  • 串口控制台的远程访问 Conserver
  • 控制台版本的扫雷游戏 fsaper
  • 控制台文本编辑器 GNU Moe


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3