Как вызвать событие перед средой.Exit()?
у меня есть консольное приложение на C#. Если что-то пойдет не так, я называю Environment.Exit()
закрыть мою заявку. Мне нужно отключиться от сервера и закрыть некоторые файлы до завершения работы приложения.
в Java я могу реализовать крюк выключения и зарегистрировать его через Runtime.getRuntime().addShutdownHook()
. Как я могу достичь того же в C#?
3 ответов
можно присоединить обработчик событий к событию ProcessExit текущего домена приложения:
using System;
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += (s, e) => Console.WriteLine("Process exiting");
Environment.Exit(0);
}
}
крючком AppDomain события:
private static void Main(string[] args)
{
var domain = AppDomain.CurrentDomain;
domain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
domain.ProcessExit += new EventHandler(domain_ProcessExit);
domain.DomainUnload += new EventHandler(domain_DomainUnload);
}
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
Console.WriteLine("MyHandler caught: " + e.Message);
}
static void domain_ProcessExit(object sender, EventArgs e)
{
}
static void domain_DomainUnload(object sender, EventArgs e)
{
}
Я бы рекомендовал обернуть вызов в среду.Exit () в вашем собственном методе и используя это повсюду. Что-то вроде этого:--2-->
internal static void MyExit(int exitCode){
// disconnect from network streams
// ensure file connections are disposed
// etc.
Environment.Exit(exitCode);
}