Como chamar evento antes Environment.Exit ()?
-
12-09-2019 - |
Pergunta
Eu tenho um aplicativo de console em C #. Se algo der errado, eu chamo Environment.Exit()
para fechar a minha candidatura. Eu preciso desconectar-se do servidor e fechar alguns arquivos antes de terminar a aplicação.
Em Java, eu posso implementar um gancho de desligamento e registrá-lo via Runtime.getRuntime().addShutdownHook()
. Como posso conseguir o mesmo em C #?
Solução
Você pode anexar um manipulador de evento para evento ProcessExit do domínio de aplicativo atual:
using System;
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += (s, e) => Console.WriteLine("Process exiting");
Environment.Exit(0);
}
}
Outras dicas
AppDomain eventos:
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)
{
}
Eu recomendo envolvendo a chamada para Environment.Exit () no seu próprio método e utilizando-se por toda parte. Algo parecido com isto:
internal static void MyExit(int exitCode){
// disconnect from network streams
// ensure file connections are disposed
// etc.
Environment.Exit(exitCode);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow