Compartir vía


Console.CancelKeyPress Evento

Definición

Se produce cuando la tecla modificadora Control (Ctrl) y la tecla de consola C (C) o la tecla Interrumpir se presionan simultáneamente (Ctrl+C o Ctrl+Inter).

public:
 static event ConsoleCancelEventHandler ^ CancelKeyPress;
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static event ConsoleCancelEventHandler? CancelKeyPress;
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
[System.Runtime.Versioning.UnsupportedOSPlatform("android")]
[System.Runtime.Versioning.UnsupportedOSPlatform("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatform("tvos")]
public static event ConsoleCancelEventHandler? CancelKeyPress;
public static event ConsoleCancelEventHandler CancelKeyPress;
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.CancelKeyPress : ConsoleCancelEventHandler 
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("android")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("ios")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("tvos")>]
member this.CancelKeyPress : ConsoleCancelEventHandler 
member this.CancelKeyPress : ConsoleCancelEventHandler 
Public Shared Custom Event CancelKeyPress As ConsoleCancelEventHandler 

Tipo de evento

Atributos

Ejemplos

En el ejemplo siguiente se muestra cómo se usa el CancelKeyPress evento . Al presionar Ctrl+C, se interrumpe la operación de lectura y se invoca el myHandler controlador de eventos. Tras la entrada al controlador de eventos, la ConsoleCancelEventArgs.Cancel propiedad es false, lo que significa que el proceso actual finalizará cuando finalice el controlador de eventos. Sin embargo, el controlador de eventos establece la ConsoleCancelEventArgs.Cancel propiedad trueen , lo que significa que el proceso no finalizará y la operación de lectura se reanudará.

using namespace System;

void OnCancelKeyPressed(Object^ sender, 
    ConsoleCancelEventArgs^ args)
{
    Console::WriteLine("{0}The read operation has been interrupted.",
        Environment::NewLine);

    Console::WriteLine("  Key pressed: {0}", args->SpecialKey);

    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();

    // 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;
        }
    }
}
// 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
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
open System

let myHandler sender (args: ConsoleCancelEventArgs) =
    printfn "\nThe read operation has been interrupted."

    printfn $"  Key pressed: {args.SpecialKey}"

    printfn $"  Cancel property: {args.Cancel}"

    // Set the Cancel property to true to prevent the process from terminating.
    printfn "Setting the Cancel property to true..."
    args.Cancel <- true

    // Announce the new value of the Cancel property.
    printfn $"  Cancel property: {args.Cancel}"
    printfn "The read operation will resume...\n"

// Establish an event handler to process key press events.
Console.CancelKeyPress.AddHandler(ConsoleCancelEventHandler myHandler)

let mutable quit = false
while not quit do
    printf "Press any key, or 'X' to quit, or "
    printfn "CTRL+C to interrupt the read operation:"

    // Start a console read operation. Do not display the input.
    let cki = Console.ReadKey true

    // Announce the name of the key that was pressed .
    printfn $"  Key pressed: {cki.Key}\n"

    // Exit if the user pressed the 'X' key.
    if cki.Key = ConsoleKey.X then
        quit <- true

// 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
Class Sample
    Public Shared Sub Main() 
        Dim cki As ConsoleKeyInfo
        
        Console.Clear()
        
        ' Establish an event handler to process key press events.
        AddHandler Console.CancelKeyPress, AddressOf 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}{vbCrLf}")
            
            ' Exit if the user pressed the 'X' key.
            If cki.Key = ConsoleKey.X Then Exit While
        End While
    End Sub

    Protected Shared Sub myHandler(ByVal sender As Object, _
                                   ByVal args As ConsoleCancelEventArgs) 
        Console.WriteLine($"{vbCrLf}The 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...{vbCrLf}")
    End Sub
End Class
' The example diplays 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

Comentarios

Este evento se usa junto con System.ConsoleCancelEventHandler y System.ConsoleCancelEventArgs. El CancelKeyPress evento permite a una aplicación de consola interceptar la señal Ctrl+C para que el controlador de eventos pueda decidir si desea continuar ejecutando o finalizar. Para obtener más información sobre el manejo de eventos, consulte controlar y provocar eventos.

Cuando el usuario presiona Ctrl+C o Ctrl+Break, se desencadena el CancelKeyPress evento y se ejecuta el controlador de eventos de ConsoleCancelEventHandler la aplicación. El controlador de eventos se pasa a un ConsoleCancelEventArgs objeto que tiene dos propiedades útiles:

  • SpecialKey, que permite determinar si el controlador se invocó como resultado del usuario que presiona Ctrl+C (el valor de la propiedad es ConsoleSpecialKey.ControlC) o Ctrl+Break (el valor de la propiedad es ConsoleSpecialKey.ControlBreak).

  • Cancel, que le permite determinar cómo debe responder la aplicación al usuario presionando Ctrl+C o Ctrl+Interrumpir. De forma predeterminada, la propiedad es false, lo que hace que la Cancel ejecución del programa finalice cuando se cierra el controlador de eventos. Cambiar su propiedad a true especifica que la aplicación debe continuar ejecutándose.

Sugerencia

Si la aplicación tiene requisitos simples, puede usar la TreatControlCAsInput propiedad en lugar de este evento. Al establecer esta propiedad falseen , puede asegurarse de que la aplicación siempre salga si el usuario presiona Ctrl+C. Al establecerlo trueen , puede asegurarse de que presionar Ctrl+C no finalizará la aplicación.

El controlador de eventos para este evento se ejecuta en un subproceso del grupo de subprocesos.

Se aplica a

Consulte también