C#控制台程序中处理2个关闭事件的代码实例
From: http://www.cnblogs.com/lvxiangjack/p/5363627.html
我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭。如果我们不希望用户通过Ctrl+C终止我们的程序,就需要对Ctrl+C或关闭事件作处理。
处理方法
在.net平台下Console类有个CancelKeyPress事件可以处理Ctrl+C,不过对于直接关闭控制台应用,这种处理就无能为力了。
不过Windows API中有个SetConsoleCtrlHandler函数可以处理这两种关闭事件。
C#处理代码如下:
导入命名空间
using System.Runtime.InteropServices;
处理方法
在.net平台下Console类有个CancelKeyPress事件可以处理Ctrl+C,不过对于直接关闭控制台应用,这种处理就无能为力了。
不过Windows API中有个SetConsoleCtrlHandler函数可以处理这两种关闭事件。
C#处理代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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个关闭事件的代码实例相关推荐
- 在vc6控制台程序中如何调用运行ImageMagick命令行工具
在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...
- 在控制台程序中隐藏控制台窗口
在控制台程序中隐藏控制台窗口 大家都知道,当编写一个win32 console application时,当运行此类程序的时候 默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只 ...
- 如何在.NET Core控制台程序中使用依赖注入
背景介绍 依赖注入(Dependency Injection), 是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度.在.NET Core MVC中 我们可以在Startup.cs文件的Co ...
- VC的Win32控制台程序中使用MFC库文件
如果想要在VC中的Win32控制台程序中使用CString类,应注意下列情况: 1.必须包含头文件#include <afx.h> 2.Project ----settings... -- ...
- 对文件或文件夹进行删除、移动、windows10重命名等操作时,系统可能提示“操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试
我们在windows10中对文件或文件夹进行删除.移动.重命名等操作时,系统可能提示"操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试.",遇到这种 ...
- 操作无法完成,因为其中的文件夹或文件已在另一程序中打开,请关闭该文件或文件,然后重试解决方法
今天卸载WPS后,想把安装的文件夹删除掉.提示"操作无法完成,因为其中的文件夹或文件已在另一程序中打开,请关闭该文件或文件,然后重试" 查找何处占用最后发现有一个DLL文件被占用, ...
- C#net6控制台程序中读取appsettings.json
C#net6控制台程序中读取appsettings.json 背景 具体实现 使用方法 背景 我们知道,在原来.netframework平台下的控制台程序配置文件为App.config,微软推出跨平台 ...
- swing程序中如何响应鼠标回车事件?
swing程序中如何响应鼠标回车事件? 参考这里实现:http://topic.csdn.net/u/20090806/17/b49846f5-cd76-467e-9b7c-21fe41846095. ...
- 微信开发上传视频到服务器,微信小程序中实现上传视频的开发代码
微信小程序中实现上传视频的开发代码,视频,接口,上传,代码,服务器 微信小程序中实现上传视频的开发代码 易采站长站,站长之家为您整理了微信小程序中实现上传视频的开发代码的相关内容. 本篇文章给大家带来 ...
最新文章
- python贪婪匹配顺序_Python正则表达式:贪婪模式返回多个空匹配
- Git 版本管理工具命令速查
- Android 抖动提示动画
- NLP简报(Issue#9)
- java数组原理_Java数组排序原理
- android可以root的版本,Android8.0以上系统ROOT时,Magisk框架替代SpuerSU
- Java多线程编程总结 链接
- python类方法在类外定义_第7.15节 Python中classmethod定义的类方法详解
- Wannacry勒索病毒样本分析
- 【云服务器安全加固】
- labview压装设备最终代码,基于QMH框架和Machine框架有机结合
- 【ArcGIS】Packaging succeeded,but publishing failed unable to connect to publishing tools service
- OSChina 周五乱弹 —— 为什么程序媛那么少?
- MC74HC595驱动
- css3实现3d图片旋转效果
- C语言打印心形,爱心打印
- 例题9-27 方块消除 UVa10559
- FFmpeg源码分析:AVIOContext、IO模型与协议
- 2020/10/22【ArcGIS】土地利用数据重分类与叠置分析-方法复盘
- ios11适配 以及会有的坑