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

时间:2012-04-23 15:48:52

标签: c# mono keyboard console

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

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

感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:1)

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

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

此示例来自this Mono FAQ page

// 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); }
    });

答案 1 :(得分:0)

您可以使用Console.CancelKeyPress event

  

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