C# 向控制台应用程序添加键盘快捷键-与单声道兼容

C# 向控制台应用程序添加键盘快捷键-与单声道兼容,c#,mono,keyboard,console,C#,Mono,Keyboard,Console,我正在检查在我的控制台应用程序运行时按下了哪些键盘按钮和组合 我想做的一件事是在控制台应用程序中捕获Ctrl+C,这样它就不会只是退出,而是进行一些整理并优雅地关闭 感谢您提供的任何帮助您可以使用 此事件与一起使用 System.ConsoleCancelEventHandler和System.ConsoleCancelEventArgs。 CancelKeyPress事件使控制台应用程序能够拦截 CTRL+C信号,以便应用程序可以决定是否继续 执行或终止 如果在Unix/Linux下运行,请使

我正在检查在我的控制台应用程序运行时按下了哪些键盘按钮和组合

我想做的一件事是在控制台应用程序中捕获Ctrl+C,这样它就不会只是退出,而是进行一些整理并优雅地关闭

感谢您提供的任何帮助

您可以使用

此事件与一起使用 System.ConsoleCancelEventHandler和System.ConsoleCancelEventArgs。 CancelKeyPress事件使控制台应用程序能够拦截 CTRL+C信号,以便应用程序可以决定是否继续 执行或终止


如果在Unix/Linux下运行,请使用Mono.UnixSignal

我在Linux应用程序上使用它。其优点是,它还可以检测到重新启动或系统关闭

这个例子来自


感谢control c只是一个示例,我还想捕获其他键盘事件,而不仅仅是ctrl c
// Catch SIGINT and SIGUSR1
UnixSignal[] signals = new UnixSignal [] {
    new UnixSignal (Mono.Unix.Native.Signum.SIGINT),
    new UnixSignal (Mono.Unix.Native.Signum.SIGUSR1),
};

Thread signal_thread = new Thread (delegate () {
    while (true) {
        // Wait for a signal to be delivered
        int index = UnixSignal.WaitAny (signals, -1);

        Mono.Unix.Native.Signum signal = signals [index].Signum;

        // Notify the main thread that a signal was received,
    // you can use things like:
    //    Application.Invoke () for Gtk#
    //    Control.Invoke on Windows.Forms
    //    Write to a pipe created with UnixPipes for server apps.
    //    Use an AutoResetEvent

    // For example, this works with Gtk#    
    Application.Invoke (delegate () { ReceivedSignal (signal); }
    });