CancelKeyPress处理程序未调用,因为之前的其他应用程序处理程序退出

时间:2014-07-08 09:16:01

标签: c# event-handling signals

我正在启动我的控制台应用程序:

static void Main(string[] args)
{
    Console.CancelKeyPress += ConsoleCancelKeyPress;
    LaunchOtherComponent();
    Console.Read();
    Cleanup();
 }

 private static void ConsoleCancelKeyPress(object src, ConsoleCancelEventArgs consoleEvent)
 {
     if (cancelKeyPressed)
     {
         Log.Fatal("User pressed ctrl-c twice, forcing hard process termination.");
         consoleEvent.Cancel = false;
     }
     else
     {
         Log.Info("User pressed ctrl-c we just ignore it...");
         //I REALLY want this log!
         Thread.Sleep(5000);
         cancelKeyPressed = consoleEvent.Cancel = true;
     }
 }

我的问题是,似乎我的回调从未被调用,因为在LaunchOtherComponent其他类正在注册到Ctrl + C信号并退出应用程序(在另一个库中甚至可能在C ++中)。所以清理永远不会被称为......

我认为,因为我是第一个注册的人,我将是第一个被调用的人。为什么不是这样?

然后我在LaunchOtherComponent之后将我的注册移动到处理程序并且它可以工作。 有没有更清洁的方法来解决这个问题?

0 个答案:

没有答案