2

这是我的场景:我有一个控制台应用程序,我正在尝试使用以下代码处理控制台的“关闭事件”:

static void Main(string[] args)
{
    SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCtrlCheck), true);
.......
}

[DllImport("Kernel32")]
        public static extern bool SetConsoleCtrlHandler(HandlerRoutine Handler, bool Add);
        public delegate bool HandlerRoutine(CtrlTypes CtrlType);
        public enum CtrlTypes
        {
            CTRL_C_EVENT = 0,
            CTRL_BREAK_EVENT,
            CTRL_CLOSE_EVENT,
            CTRL_LOGOFF_EVENT = 5,
            CTRL_SHUTDOWN_EVENT
        }
        private static bool ConsoleCtrlCheck(CtrlTypes ctrlType)
        {

            writeOnLogFile("Closed Manually");
            logWriter.WriteLine();
            logWriter.WriteLine();
            logWriter.Close();
            return true;
        }

有时,当我使用“X”按钮关闭控制台时,这是显示给我的页面:No Source available。我尝试查看堆栈调用,但没有什么有用的。那么,我该如何解决呢?

4

2 回答 2

4

我设法解决了这个问题,改变了我的代码:

public delegate bool HandlerRoutine(CtrlTypes CtrlType);

static void Main(string[] args)
{
   SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCtrlCheck), true);
  .......
}

public delegate bool HandlerRoutine(CtrlTypes CtrlType);
public static HandlerRoutine rout = new HandlerRoutine(ConsoleCtrlCheck);

static void Main(string[] args)
{
   SetConsoleCtrlHandler(rout, true);
  .......
}

在完美运行之前初始化“HandlerRoutine”。还是非常感谢!我希望它对某人有用!

于 2013-05-31T08:52:49.940 回答
0

看,处理程序是否真的每次都附加。

这看起来好像处理程序并不总是正确连接。

发生此异常时,您是否有日志条目?

于 2013-05-29T13:24:27.447 回答