C#控制台程序中处理2个关闭事件的代码实例
作者:junjie 发布时间:2021-11-21 03:45:40
应用场景
我们开发的控制台应用,在运行阶段很有可能被用户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();
}
}


猜你喜欢
- JVM内存模型/内存空间Java虚拟机JVM运行起来,就会给内存划分空间,这块空间成为运行时数据区。运行时数据区主要划分为以下 6
- 这篇文章主要介绍了通过实例解析java8中的parallelStream,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- SpringBoot 中使用activeMq的步骤:1、pom中引入jar包: <dependency>  
- 本文实例讲述了C#找出字符串中第一个字母并大写的方法。分享给大家供大家参考,具体如下:class Program{ static
- 一、前言Redis是一个NoSQL(非关系型数据库)数据库之一,key-value存储系统或者说是一个缓存键值对数据库,具有如下特性:基于内
- java HashMap多层嵌套package chapter12;import java.util.HashMap;public clas
- 本文实例讲述了Java编程调用微信分享功能。分享给大家供大家参考,具体如下:这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发
- 目录进程、线程1. 进程2. 线程分时、分片同步、异步异步、多线程异步多线程效率多线程无序性扩展异步多线程版本下一篇:C# 异步多线程入门到
- 从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的不同地方。在C#中,我们必须在设计类型的时候就决定类型实例
- 定义与结构 备忘录(Memento)模式又称标记(Token)模式。GOF给备忘录模式的定义为:在不破坏
- Android Notification的多种用法总结我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏
- 如果我们只是需要让用户能够拍摄照片,则可以直接请求已有相机应用拍摄照片并将照片返回给我们1、拍照1.1 请求相机功能在清单文件中添加: &n
- 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 一、Canvas Canvas中的方法很多,这里我们只挑常用的进行讲解说明 Canvas可以绘制的对象有:弧线(arcs) canvas.填
- 新建多国语言包要在android studio项目中新建多国语言包,有两种方式,一种是手动建,一种是用使用android studio辅助建
- 1. 问题所示编译ssm的项目的时候出现了这个错误导致一直运行不起来SLF4J: Failed to load class "or
- 本文实例讲述了Android开发实现删除联系人通话记录的方法。分享给大家供大家参考,具体如下:1. 负责存放呼叫记录的内容提供者源码在 Co
- 1.什么是线程安全性当多个线程访问某个类时,不管运行时环境采用何种调用方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或
- 本文实例为大家分享了PhotoView实现图片双击放大单击退出的具体代码,供大家参考,具体内容如下实现思路1.复制PhotoView&nbs
- 补间可以实现两个图形之间颜色、形状、大小、位置等的线性变化。例如A...AB...BC...C,其中A、B、C是三幅图片,两个A的宽分别是1