C#控制臺(tái)程序中處理2個(gè)關(guān)閉事件的代碼實(shí)例
應(yīng)用場(chǎng)景
我們開(kāi)發(fā)的控制臺(tái)應(yīng)用,在運(yùn)行階段很有可能被用戶(hù)Ctrl+C終止或是被用戶(hù)直接關(guān)閉。如果我們不希望用戶(hù)通過(guò)Ctrl+C終止我們的程序,就需要對(duì)Ctrl+C或關(guān)閉事件作處理。
處理方法
在.net平臺(tái)下Console類(lèi)有個(gè)CancelKeyPress事件可以處理Ctrl+C,不過(guò)對(duì)于直接關(guān)閉控制臺(tái)應(yīng)用,這種處理就無(wú)能為力了。
不過(guò)Windows API中有個(gè)SetConsoleCtrlHandler函數(shù)可以處理這兩種關(guān)閉事件。
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工具被強(qiáng)制關(guān)閉"); //Ctrl+C關(guān)閉
break;
case 2:
Console.WriteLine("2工具被強(qiáng)制關(guān)閉");//按控制臺(tái)關(guān)閉按鈕關(guān)閉
break;
}
Console.ReadLine();
return false;
}
/// <summary>
/// 應(yīng)用程序的主入口點(diǎn)。
/// </summary>
[STAThread]
static void Main(string[] args)
{
SetConsoleCtrlHandler(cancelHandler, true);
Console.ReadLine();
}
}
- c#取得控制臺(tái)應(yīng)用程序根目錄
- C#控制臺(tái)輸出進(jìn)度和百分比的實(shí)例代碼
- C#控制臺(tái)帶參數(shù)程序源碼編寫(xiě)實(shí)例講解
- c#實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)udp異步通信程序示例
- C#控制臺(tái)基礎(chǔ) list<>初始化的兩種方法
- C#操作SQLite方法實(shí)例詳解
- C#中使用SQLite數(shù)據(jù)庫(kù)的方法介紹
- ASP.NET(C#)中操作SQLite數(shù)據(jù)庫(kù)實(shí)例
- C#中實(shí)現(xiàn)在32位、64位系統(tǒng)下自動(dòng)切換不同的SQLite dll文件
- C#創(chuàng)建SQLite控制臺(tái)應(yīng)用程序詳解
相關(guān)文章
C#使用分部類(lèi)設(shè)計(jì)實(shí)現(xiàn)一個(gè)計(jì)算器
分部類(lèi)是C#4.5中的一個(gè)新特性,它的出現(xiàn)使得程序的結(jié)構(gòu)更加合理,代碼組織更加緊密,本文將使用分部類(lèi)設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,感興趣的小伙伴可以了解下2024-02-02
C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記
這篇文章主要介紹了C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記,本文給出一個(gè)簡(jiǎn)單子實(shí)例講解C#中的繼承,并講解了一些C#繼承的知識(shí)技巧,需要的朋友可以參考下2015-01-01
C#調(diào)用usb攝像頭的實(shí)現(xiàn)方法
這篇文章主要介紹了C#調(diào)用usb攝像頭的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
C#實(shí)現(xiàn)帶百分比的進(jìn)度條功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)帶百分比的進(jìn)度條功能,分析了帶百分比進(jìn)度條的功能需求并結(jié)合實(shí)例形式給出了具體實(shí)現(xiàn)步驟與相關(guān)操作方法,需要的朋友可以參考下2017-05-05
C#使用正則表達(dá)式過(guò)濾html標(biāo)簽
最近在開(kāi)發(fā)一個(gè)項(xiàng)目,其中有需求要求我們把一段html轉(zhuǎn)換為一般文本返回,使用正則表達(dá)式是明智的選擇,下面小編給介紹下C#使用正則表達(dá)式過(guò)濾html標(biāo)簽,需要的朋友參考下2016-08-08
C#備忘錄模式(Memento Pattern)實(shí)例教程
這篇文章主要介紹了C#備忘錄模式(Memento Pattern),以一個(gè)支持回退操作的例子講述了C#備忘模式的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-09-09

