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