Не срабатывают события на закрытие консольного приложения
Не срабатывает
AppDomain.CurrentDomain.ProcessExit += (s, e) =>
{
File.WriteAllText("test.txt", "ddasdasdada");
};
Консольное приложение Net Framework 4.0
Пробовал так же остальные от сюда
Так же попробовал так:
private const int WM_CLOSE = 0x0010;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CLOSE)
{
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "xxx.txt"), "work");
}
base.WndProc(ref m);
}
К сожалению не дало результата
Ответы (1 шт):
Автор решения: GooliveR
→ Ссылка
Решено при помощи SetConsoleCtrlHandler
class Program
{
// https://docs.microsoft.com/en-us/windows/console/setconsolectrlhandler?WT.mc_id=DT-MVP-5003978
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(SetConsoleCtrlEventHandler handler, bool add);
// https://docs.microsoft.com/en-us/windows/console/handlerroutine?WT.mc_id=DT-MVP-5003978
private delegate bool SetConsoleCtrlEventHandler(CtrlType sig);
private enum CtrlType
{
CTRL_C_EVENT = 0,
CTRL_BREAK_EVENT = 1,
CTRL_CLOSE_EVENT = 2,
CTRL_LOGOFF_EVENT = 5,
CTRL_SHUTDOWN_EVENT = 6
}
static void Main(string[] args)
{
// Register the handler
SetConsoleCtrlHandler(Handler, true);
// Wait for the event
while (true)
{
Thread.Sleep(50);
}
}
private static bool Handler(CtrlType signal)
{
switch (signal)
{
case CtrlType.CTRL_BREAK_EVENT:
case CtrlType.CTRL_C_EVENT:
case CtrlType.CTRL_LOGOFF_EVENT:
case CtrlType.CTRL_SHUTDOWN_EVENT:
case CtrlType.CTRL_CLOSE_EVENT:
Console.WriteLine("Closing");
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "xxx.txt"), "work");
Environment.Exit(0);
return false;
default:
return false;
}
}
}