// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.
using namespace System;
// When you press CTRL+C, the read operation is interrupted and the
// console cancel event handler, myHandler, is invoked. Upon entry
// to the event handler, the Cancel property is false, which means
// the current process will terminate when the event handler terminates.
// However, the event handler sets the Cancel property to true, which
// means the process will not terminate and the read operation will resume.
void OnCancelKeyPressed(Object^ sender,
ConsoleCancelEventArgs^ args)
{
// Announce that the event handler has been invoked.
Console::WriteLine("{0}The read operation has been interrupted.",
Environment::NewLine);
// Announce which key combination was pressed.
Console::WriteLine(" Key pressed: {0}", args->SpecialKey);
// Announce the initial value of the Cancel property.
Console::WriteLine(" Cancel property: {0}", 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: {0}", args->Cancel);
Console::WriteLine("The read operation will resume...{0}",
Environment::NewLine);
}
int main()
{
// Clear the screen.
Console::Clear();
// Turn off the default system behavior when CTRL+C is pressed. When
// Console.TreatControlCAsInput is false, CTRL+C is treated as an
// interrupt instead of as input.
Console::TreatControlCAsInput = false;
// Establish an event handler to process key press events.
Console::CancelKeyPress +=
gcnew ConsoleCancelEventHandler(OnCancelKeyPressed);
while (true)
{
// Prompt the user.
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.
ConsoleKeyInfo^ keyInfo = Console::ReadKey(true);
// Announce the name of the key that was pressed .
Console::WriteLine(" Key pressed: {0}{1}", keyInfo->Key,
Environment::NewLine);
// Exit if the user pressed the 'X' key.
if (keyInfo->Key == ConsoleKey::X)
{
break;
}
}
}
/*
This code example produces results similar to the following text:
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
*/
|