捕获控制台退出 C#

2023-12-04

我有一个包含很多线程的控制台应用程序。有些线程监视某些条件并在满足条件时终止程序。这种终止可能随时发生。

我需要一个可以在程序关闭时触发的事件,以便我可以清理所有其他线程并正确关闭所有文件句柄和连接。我不确定 .NET 框架中是否已经内置了一个框架,因此我在编写自己的框架之前先询问一下。

我想知道是否有类似的事件:

MyConsoleProgram.OnExit += CleanupBeforeExit;

我不确定在网上哪里找到了代码,但我现在在我的一个旧项目中找到了它。这将允许您在控制台中执行清理代码,例如当它突然关闭或由于关闭而...

[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add);

private delegate bool EventHandler(CtrlType sig);
static EventHandler _handler;

enum CtrlType
{
  CTRL_C_EVENT = 0,
  CTRL_BREAK_EVENT = 1,
  CTRL_CLOSE_EVENT = 2,
  CTRL_LOGOFF_EVENT = 5,
  CTRL_SHUTDOWN_EVENT = 6
}

private static bool Handler(CtrlType sig)
{
  switch (sig)
  {
      case CtrlType.CTRL_C_EVENT:
      case CtrlType.CTRL_LOGOFF_EVENT:
      case CtrlType.CTRL_SHUTDOWN_EVENT:
      case CtrlType.CTRL_CLOSE_EVENT:
      default:
          return false;
  }
}


static void Main(string[] args)
{
  // Some biolerplate to react to close window event
  _handler += new EventHandler(Handler);
  SetConsoleCtrlHandler(_handler, true);
  ...
}

Update

对于那些没有检查评论的人来说,这个特定的解决方案似乎确实not工作良好(或根本)Windows 7的。下列thread谈论这个

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

捕获控制台退出 C# 的相关文章

随机推荐