Solución:
El método adecuado sería Application.Exit()
. De acuerdo con la Documentación, finaliza todos los bucles de mensajes y cierra todas las ventanas, lo que le da a sus formularios la posibilidad de ejecutar su código de limpieza (en Form.OnClose, etc.).
Environment.Exit
simplemente mataría el proceso. Si algún formulario tiene, por ejemplo, cambios no guardados, no tendrá ninguna posibilidad de preguntar al usuario si quiere guardarlos. Además, los recursos (conexiones de base de datos, etc.) no se pudieron liberar correctamente, es posible que los archivos no se vacíen, etc.
Form.Close
simplemente hace lo que dice: cierra un formulario. Si tiene otros formularios abiertos (quizás no ahora, pero en alguna versión futura de su aplicación), la aplicación no terminará.
Tenga en cuenta que si utiliza subprocesos múltiples, Application.Exit()
no terminará sus hilos (y por lo tanto la aplicación seguirá funcionando en segundo plano, incluso si se termina la GUI). Por lo tanto, debe tomar medidas para eliminar sus hilos, ya sea en la función principal (es decir, Program.Main()
) o cuando en el OnClose
evento de su forma principal.
todos ellos están bien. pero form.Close()
no cerrará su aplicación, cierra el formulario y luego el método principal devuelve un int (código de salida).
si desea que su aplicación salga con códigos de salida, use
Environmet.Exit(exitcode)
o devolver el código de salida en el método principal