---
lang: ja-jp
breaks: true
---
# C#コンソールアプリで `Ctrl+C`(SIGINT)をトラップする方法 2021-07-22
> Console.CancelKeyPress Event
> https://docs.microsoft.com/en-us/dotnet/api/system.console.cancelkeypress?redirectedfrom=MSDN&view=net-5.0
```csharp=
using (CancellationTokenSource cancellationTokenSource = new())
{
Console.CancelKeyPress += (o, a) =>
{
if (a.SpecialKey == ConsoleSpecialKey.ControlC)
{
cancellationTokenSource.Cancel();
};
Console.WriteLine($"{a.Cancel} {a.SpecialKey}");
};
・・・
}
```
```csharp=
using System;
class Sample
{
public static void Main()
{
ConsoleKeyInfo cki;
Console.Clear();
// Establish an event handler to process key press events.
Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
while (true)
{
Console.Write("Press any key, or 'X' to quit, or ");
Console.WriteLine("CTRL+C to interrupt the read operation:");
// Start a console read operation. Do not display the input.
cki = Console.ReadKey(true);
// Announce the name of the key that was pressed .
Console.WriteLine($" Key pressed: {cki.Key}\n");
// Exit if the user pressed the 'X' key.
if (cki.Key == ConsoleKey.X) break;
}
}
protected static void myHandler(object sender, ConsoleCancelEventArgs args)
{
Console.WriteLine("\nThe read operation has been interrupted.");
Console.WriteLine($" Key pressed: {args.SpecialKey}");
Console.WriteLine($" Cancel property: {args.Cancel}");
// Set the Cancel property to true to prevent the process from terminating.
Console.WriteLine("Setting the Cancel property to true...");
args.Cancel = true;
// Announce the new value of the Cancel property.
Console.WriteLine($" Cancel property: {args.Cancel}");
Console.WriteLine("The read operation will resume...\n");
}
}
// The example displays output similar to the following:
// Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
// Key pressed: J
//
// Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
// Key pressed: Enter
//
// Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
//
// The read operation has been interrupted.
// Key pressed: ControlC
// Cancel property: False
// Setting the Cancel property to true...
// Cancel property: True
// The read operation will resume...
//
// Key pressed: Q
//
// Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
// Key pressed: X
```
###### tags: `C#` `コンソール` `Ctrl+C` `SIGINT` `Console` `キャンセル` `Cancel` `CancellationTokenSource`