2

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

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

感谢您的任何帮助,您可以提供

4

2 回答 2

1

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

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

这个例子来自这个 Mono FAQ 页面

// 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); }
    });
于 2012-11-30T20:36:02.733 回答
0

你可以使用Console.CancelKeyPress事件

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

于 2012-04-23T16:03:43.347 回答