NullReferenceException при управлении событием закрытия консоли

Это мой сценарий: у меня есть консольное приложение, и я пытаюсь обработать "событие закрытия" консоли с помощью этого кода:

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", мне показывается эта страница: источник недоступен. Я пытаюсь посмотреть в стеке вызова, но нет ничего полезного. Итак, как я могу решить это?

2 ответа

Решение

Мне удалось решить эту проблему, изменив мой код:

До

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", прежде чем он отлично работает. В любом случае, спасибо! Надеюсь это кому-нибудь пригодится!

Посмотрите, действительно ли обработчик подключен каждый раз.

Это выглядит так, как будто обработчик не всегда правильно подключен.

У вас есть запись в журнале, когда возникает это исключение?

Другие вопросы по тегам