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


应用场景

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

}

}

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  C#控制台程序中处理2个关闭事件的代码实例

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23468.html

相关内容

asp.net获取系统当前时间的方法详解

浅析C#静态类,静态构造函数,静态变量

C# webclient中文乱码问题解决方法

使用C#写了一个可以推算火车票身份证号码的小程序


C#中如何使用Winform实现炫酷的透明动画界面

C# 通过 inline-asm 解决嵌入x86汇编

C#接口(Interface)用法分析

C#生成code128条形码的方法

时间: 2024-10-11 20:20:51

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

在Win32控制台程序中使用CString

进入Project->Settings->General 下,在下拉框中选"Use MFC in a Static Library"(使用MFC做为静态链接库): 然后添加头文件#include <afxwin.h>,并且要放在其它头文件前. 否则,会有#error : WINDOWS.H already included. MFC apps must not #include <windows.h>的错误提示. 在Win32控制台程序中使用CStr

.net core控制台程序中使用原生依赖注入

原文:.net core控制台程序中使用原生依赖注入 如果要在程序中使用DbContext,则需要先在Nuget中安装Microsoft.EntityFrameworkCore.SqlServer using ConsoleApp1.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; using Console

Vue中监听窗口关闭事件并在窗口关闭前发送请求

Vue中监听窗口关闭事件并在窗口关闭前发送请求,代码如下: mounted() { window.addEventListener('beforeunload', e => this.beforeunloadHandler(e)) window.addEventListener('unload', e => this.unloadHandler(e)) }, destroyed() { window.removeEventListener('beforeunload', e => thi

在控制台程序中隐藏控制台窗口

大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出. 下面就介绍一下,如何隐藏win32 console application的console窗口 因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项). 首先我们来看一下linke

EasyUI中combobox的使用方法和一个代码实例

Combobox用法和方法参数: 1. 需要引入class=" easyui-combobox" 2. 参数设置需要在data-options中设置 3. 属性参数配置: valueField:基础数据值名称绑定到Combobox(提交值) textField:基础数据的字段名称绑定的Combobox(显示值) mode:定义当文本改变时如何加载列表数据,当设置为remote模式下,什么类型的用户将被发送http请求参数名为'q'的服务器,以获取新的数据. url:从远程URL来加载列

vc控制台程序中如何使用cstring类的函数,头文件怎么包含?

1.project->setting->general 里的Microsoft Foundmation class选择“Use MFC in a Shared DLL”,再包含<afx.h>就行了.2.直接include <afx.h>3.#include <atlstr.h>

在程序集或控制台程序中读取配置文件

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?tabs=basicconfiguration Nuget 添加 Microsoft.Extensions.Configuration.Json Microsoft.Extensions.Options.ConfigurationExtensions using Microsoft.Extensions.Configuration; using Sys

【天天数据结构和算法】PHP中trie数据结构的使用场景和代码实例

一.trie介绍 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie一词来自retrieve,发音为/tri:/ "tree",也有人读为/tra?/ "try". Trie树可以利用字符串的公共前缀来节约存储空间.如下图所示,该trie树用10个节点保存了6个字符串tea,ten,to,in,inn,int. 在该trie树中,字符串in,inn和int的公共前缀是

Python中的元组,字典、计算器代码实例及python2与python3的区别

1.计算器实例 #/usr/bin/env python # -*- coding:utf-8 -*- # @time   :2018/1/22 21:09 # @Author :FengXiaoqing # @file   :jsq.py def add(string):     total = 0     numbers = []     numbers += string.split("+")     for num in numbers:         total += in