C#控制臺程序中處理2個(gè)關(guān)閉事件的代碼實(shí)例
應(yīng)用場景
我們開發(fā)的控制臺應(yīng)用,在運(yùn)行階段很有可能被用戶Ctrl+C終止或是被用戶直接關(guān)閉。如果我們不希望用戶通過Ctrl+C終止我們的程序,就需要對Ctrl+C或關(guān)閉事件作處理。
處理方法
在.net平臺下Console類有個(gè)CancelKeyPress事件可以處理Ctrl+C,不過對于直接關(guān)閉控制臺應(yīng)用,這種處理就無能為力了。
不過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)閉");//按控制臺關(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#取得控制臺應(yīng)用程序根目錄
- C#控制臺輸出進(jìn)度和百分比的實(shí)例代碼
- C#控制臺帶參數(shù)程序源碼編寫實(shí)例講解
- c#實(shí)現(xiàn)簡單控制臺udp異步通信程序示例
- C#控制臺基礎(chǔ) list<>初始化的兩種方法
- C#操作SQLite方法實(shí)例詳解
- C#中使用SQLite數(shù)據(jù)庫的方法介紹
- ASP.NET(C#)中操作SQLite數(shù)據(jù)庫實(shí)例
- C#中實(shí)現(xiàn)在32位、64位系統(tǒng)下自動(dòng)切換不同的SQLite dll文件
- C#創(chuàng)建SQLite控制臺應(yīng)用程序詳解
相關(guān)文章
C#使用分部類設(shè)計(jì)實(shí)現(xiàn)一個(gè)計(jì)算器
分部類是C#4.5中的一個(gè)新特性,它的出現(xiàn)使得程序的結(jié)構(gòu)更加合理,代碼組織更加緊密,本文將使用分部類設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡單的計(jì)算器,感興趣的小伙伴可以了解下2024-02-02
C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記
這篇文章主要介紹了C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記,本文給出一個(gè)簡單子實(shí)例講解C#中的繼承,并講解了一些C#繼承的知識技巧,需要的朋友可以參考下2015-01-01
C#調(diào)用usb攝像頭的實(shí)現(xiàn)方法
這篇文章主要介紹了C#調(diào)用usb攝像頭的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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#備忘錄模式(Memento Pattern)實(shí)例教程
這篇文章主要介紹了C#備忘錄模式(Memento Pattern),以一個(gè)支持回退操作的例子講述了C#備忘模式的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-09-09

