Pregunta

Me gustaría cerrar correctamente algunos sockets y poder decirle al servidor que estamos cerrando, pero si la aplicación está cerrada, entonces los sockets están todos cerrados y, en ocasiones, los archivos quedan bloqueados. ¿Cómo puedo ejecutar un método cuando mi aplicación está cerrada?

Esto irá a una biblioteca que se usará en una aplicación de formularios.

¿Fue útil?

Solución

Implementaría IDisposable en las clases que usan estos recursos Luego, se puede llamar explícitamente a Dispose desde cualquier método de apagado que admita el tipo de aplicación (OnFormClose, OnStop, Application_End, ...).

Otros consejos

Si es una aplicación de formularios Windows Forms, puede enfocar el formulario, haga clic en el rayo de eventos en la ventana de propiedades y use el evento de cierre de formulario.

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(OnFormClosing);

private void OnFormClosing(object sender, FormClosingEventArgs e)
{
    // Your socket logic here
}

Además, si necesita interceptar el formulario que se está cerrando, establezca la propiedad Cancelar en verdadero:

e.Cancel = true;

¿Estás hablando de una aplicación WinForms? Si es así, use el evento FormClosing en su formulario principal.

No estoy seguro de si es el mejor lugar para hacerlo, pero puede decir que su proceso se está cerrando enganchando AppDomain.ProcessExit . Está bien para la limpieza, pero no creo que sea un buen momento para enviar mensajes. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top