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

本文关键字:声道 单声道 快捷键 键盘 添加 应用程序 控制台 | 更新日期: 2023-09-27 18:31:57

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

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

感谢您提供的任何帮助

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

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

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

此示例来自此单声道常见问题解答页面

// 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); }
    });
您可以使用

Console.CancelKeyPress事件。

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