CTRL-Cのトラップ
CではCTRL-Cをトラップするのにsignal関数を使ったりしましたが、.NET2.0ではConsoleクラスでサポートしてくれるようになりました。
using System; class Program { static void Main(string[] args) { // CancelKeyPressイベントを登録 Console.CancelKeyPress += delegate(object o, ConsoleCancelEventArgs e) { Console.WriteLine("CTRL-C"); e.Cancel = true; // プロセスを終了させない }; for (int i = 0; i < 10; ++i) { Console.WriteLine(DateTime.Now); System.Threading.Thread.Sleep(1000); } Console.WriteLine("Exit"); Console.ReadLine(); } } /* 結果 2004/07/25 17:58:27 2004/07/25 17:58:28 CTRL-C 2004/07/25 17:58:29 2004/07/25 17:58:30 CTRL-C 2004/07/25 17:58:31 2004/07/25 17:58:32 2004/07/25 17:58:33 CTRL-C 2004/07/25 17:58:34 2004/07/25 17:58:35 2004/07/25 17:58:36 Exit */
また、単にCTRL-Cで終了させたくないだけでしたら、
Console.TreatControlCAsInput = true;
とすれば、CTRL-Cも単なるキー入力扱いとなります。
ちなみに、.NET1.1でCTRL-Cをトラップするには、SetConsoleCtrlHandlerをP/Invokeすることになります。詳細はMore tips from Sairama - Catching Ctrl-C from a .NET Console Applicationが参考になると思います。