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();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字典表左右选择

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>管理中心 - 添加新配送点 &l…

Oracle内部错误:ORA-07445[kcflfi()+466] [INT_DIVIDE_BY_ZERO]一例

一套Windows上的11.2.0.1单实例数据库在database open阶段出现了ORA-07445:core dump [kcflfi()466] [INT_DIVIDE_BY_ZERO] [] [PC:0x500282E] [] []内部错误&#xff0c;具体的出错日志如下: LOG CONTENTALERT.LOGStarting ORACLE instance (normal) LICENSE_MAX_SESSION 0 L…

提交本地项目到github

要托管到github&#xff0c;那你就应该要有一个属于你自己的github帐号&#xff0c;所以你应该先到github.com注册 打开浏览器 在地址栏输入地址&#xff1a;github.com 填写用户名、邮箱、密码 点击Sign up即可简单地注册 2完成注册&#xff0c;进入github平台&#xff0c; 点…

一个能自动搜索源文件并自动推导的Makefile

From: http://blog.csdn.net/yuliying/article/details/49635485 这份makefile可以将当前makefile所在文件夹以及所有子文件夹中的cpp文件打包成静态库和动态库. 稍作修改目标也可以用来编译为可执行文件。 自动生成所有依赖关系&#xff0c;修改任何文件都可以触发重新编译相应…

(转)android WebView loadData不能解析(找不到网页)

public void loadData (String data, String mimeType, String encoding) loadData() 中的html data中不能包含#, %, \, ?四中特殊字符&#xff0c;出现这种字符就会出现解析错误&#xff0c;显示找不到网页还有部分html代码。因为css中经常用#, %等字符&#xff0c;所以大部…

C++11 std::bind std::function 高级用法

From: http://blog.csdn.net/eclipser1987/article/details/24406203 从最基础的了解&#xff0c;std::bind和std::function [cpp] view plaincopy/* * File: main.cpp * Author: Vicky.H * Email: eclipser163.com */ #include <iostream> #include <fun…

fragment+viewpager+tablayou实现滑动切换页面

本文目标&#xff1a;实现滑动切换页面 首先&#xff0c;Tablayout控件就需要添加design library&#xff0c;在android studio中添加依赖 compile ‘com.android.support:design:23.2.1’ 或者直接&#xff1a;File-->Project structure-->app-->Dependencies中单击加…

php 的命名空间 看鸟哥后的随笔

我以前貌似真心没有想过php的命名空间&#xff0c;我每次写文件都会记得不让类名相重&#xff0c; 看完命名空间了这个&#xff0c;我发现可以解决我的一部分问题 1 MyLove.php2 namespace Zj;3 class Application{4 public function toMyLove(){5 echo Marx is…

vue页面截图;H5页面截图;vue项目中将特定网页内容生成图片(截图);html2canvas截图

功能&#xff1a; 1.兼容 PC 和 Mobile&#xff1b; 2.对指定的区域进行截取&#xff1b; 3.可以控制截图大小&#xff1b; 4.截图生成base64图片地址 一、安装插件 npm install html2canvas --save 或 yarn add html2canvas二、在.vue页面引入使用 import html2canvas fro…

CentOS6.8升级gcc到4.8.5总结

From&#xff1a; http://www.cjjjs.com/paper/czxt/2017222114137150.aspx [摘要] 操作系统是CentOS6.8的32位版本&#xff0c;yum自带的gcc版本为4.4.7&#xff0c;不支持C11特性。所以需要升级到4.8.5&#xff0c;至少要升级到4.8.1才完全支持C11。本文提供了自动安装脚本和…

JAVA设计模式之【单例模式】

任务管理器案例 1.单例类 package Singleton;/*** Created by Jim on 2016/9/28.*/ public class TaskManager {private static TaskManager tm null;private TaskManager() {System.out.println("创建任务管理器");}public void displayProcesses() {System.out.pr…

myeclipse快捷键

Ctrl1 快速修复CtrlD: 删除当前行 CtrlQ 定位到最后编辑的地方 CtrlL 定位在某行 CtrlO 快速显示 OutLine CtrlT 快速显示当前类的继承结构 CtrlW 关闭当前Editer CtrlK 快速定位到下一个 CtrlE 快速显示当前Editer的下拉列表CtrlJ 正向增量查找(按下CtrlJ后,你所输入的…

vue下载static文件

将文件放在static静态文件夹下即可&#xff0c;如果放在src统计的static不行&#xff0c;那就放在src下级的static里 downLoadFile () {var elemIF document.createElement("iframe")// elemIF.src ../../static/政策精选模板.xlsx 这样写路径不行elemIF.src sta…

centos7.2 安装poco

下载地址: https://pocoproject.org/releases/poco-1.7.8/poco-1.7.8p3-all.tar.gz 安装&#xff1a; #!/bin/sh# 安装依赖库 # yum install openssl-devel mysql-devel# 默认方式不支持mysql #./configure --everything --omitData/ODBC,Data/SQLitemake -s#make -s install具…

ASP 错误处理

<% Option Explicit------------- 错误处理&#xff1a; ------------- 1.需在每一行可能发生错误的代码上使用"On Error" 和 "If Err.Number <> 0 Then ..." 结构。 注意作用域&#xff01; 2.On Error语句: 启用或禁用错误处理程序* On Error G…

【云计算】K8S DaemonSet 每个node上都运行一个pod

Kubernetes容器集群中的日志系统集成实践 Kubernetes是原生的容器编排管理系统&#xff0c;对于负载均衡、服务发现、高可用、滚动升级、自动伸缩等容器云平台的功能要求有原生支持。今天我分享一下我们在Kubernetes集群中日志管理的实践方案。在这个方案中&#xff0c;除了Doc…

struct结构体初始化3种方法

From: http://blog.csdn.net/thdxs/article/details/8204118 struct是C中重要的ADT。但是在一般讲C的书中&#xff0c;往往只介绍了struct的定义、顺序初始化及位域。      为了方便后面的介绍&#xff0c;先定义一个struct类型&#xff1a;    struct User    {    …

OI基础系列之最大子数组问题

OI基础系列之最大子数组问题 ——Edward2414 oi退役了&#xff0c;虽然没取得多少成绩&#xff0c;也算是走过一会的人了。我相信绝大多数oi党都是自学成才&#xff0c;在此&#xff0c;我感谢那些把自己所学写到博客里的前辈们&#xff0c;没有你们&#xff0c;我不可能…

面向对象组合继承

function Person(name,sex,age){ this.name name; this.sex sex; this.age age;}Person.prototype.eat function(){ console.log("每个人都会吃饭");}function Programmer(name,sex,age){ this.habby "看书"; Person.call(this,name,sex,…

企业微信报错https:// open.work.weixin.qq.com/devtool/query?e=60020

企业微信报错&#xff1a; not allow to access from your ip, hint: [1667358733640290333963300], from ip: 180.164.177.83, more info at https:// open.work.weixin.qq.com/devtool/query?e60020 企业微信对60020处理&#xff1a;我是没太搞懂这个 企业微信报错60020解决…