C# Win32控制台應用程序忽略 Ctrl + C,阻止程序退出,這裡使用到了Windows API SetConsoleCtrlHandler函數
注意:在VS中調試執行時,在處理程序例程中設置斷點,不會中斷;會提示:無可用源,如下圖:

完整示例代碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
/************************************************************************/
/* CSharp_Win32控制台應用程序忽略 Ctrl + C
* Powered by:testcs_dn
* Blog:http://blog.csdn.net/testcs_dn
*/
/************************************************************************/
namespace CSharp_Win32控制台應用程序忽略CtrlC
{
//定義處理程序委托
public delegate bool ConsoleCtrlDelegate(int ctrlType);
class Program
{
//導入SetCtrlHandlerHandler API
[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
//當用戶關閉Console時,系統會發送次消息
private const int CTRL_CLOSE_EVENT = 2;
//Ctrl+C,系統會發送次消息
private const int CTRL_C_EVENT = 0;
//Ctrl+break,系統會發送次消息
private const int CTRL_BREAK_EVENT = 1;
//用戶退出(注銷),系統會發送次消息
private const int CTRL_LOGOFF_EVENT = 5;
//系統關閉,系統會發送次消息
private const int CTRL_SHUTDOWN_EVENT = 6;
static void Main(string[] args)
{
Program cls = new Program();
//Console.ReadKey();
}
public Program()
{
ConsoleCtrlDelegate consoleDelegete = new ConsoleCtrlDelegate(HandlerRoutine);
bool bRet = SetConsoleCtrlHandler(consoleDelegete, true);
if (bRet == false) //安裝事件處理失敗
{
Console.WriteLine("error");
while (true)
{
Console.WriteLine("...");
Thread.Sleep(1000);
}
}
else
{
Console.WriteLine("ok");
while (true)
{
Console.WriteLine("...");
Thread.Sleep(1000);
}
}
}
///
/// 處理程序例程,在這裡編寫對指定事件的處理程序代碼
/// 注意:在VS中調試執行時,在這裡設置斷點,但不會中斷;會提示:無可用源;
///
///
///
private static bool HandlerRoutine(int ctrlType)
{
switch(ctrlType)
{
case CTRL_C_EVENT:
Console.WriteLine("C");
return true; //這裡返回true,表示阻止響應系統對該程序的操作
//break;
case CTRL_BREAK_EVENT:
Console.WriteLine("BREAK");
break;
case CTRL_CLOSE_EVENT:
Console.WriteLine("CLOSE");
break;
case CTRL_LOGOFF_EVENT:
Console.WriteLine("LOGOFF");
break;
case CTRL_SHUTDOWN_EVENT:
Console.WriteLine("SHUTDOWN");
break;
}
//return true;//表示阻止響應系統對該程序的操作
return false;//忽略處理,讓系統進行默認操作
}
}
}