Tengo una aplicación publicada en C #. El problema aquí es que cada vez que cierro el formulario principal haciendo clic en el botón rojo de salida, cierra el formulario pero no cierra la aplicación. Descubrí esto cuando intenté apagar la computadora, con la esperanza de que la aplicación que ejecuté funcionara sin problemas y luego fui bombardeado por muchas ventanas secundarias con las que puse MessageBoxAlerts.
Lo intenté Application.Exitpero todavía llama a todas las ventanas y alertas secundarias y no sé cómo usar Environment.Exity qué número entero poner en él.
Por cierto, cada vez que mis formularios llaman al evento formclosedo form closingcierro la aplicación con una this.Hide()función; ¿Afecta eso el comportamiento de mi aplicación ahora?

Respuestas:
De MSDN:
Application.Exit
Entorno Salir
Este artículo, Application.Exit vs. Environment.Exit , apunta hacia un buen consejo:
Puede determinar si
System.Windows.Forms.Application.Runse ha llamado al verificar laSystem.Windows.Forms.Application.MessageLooppropiedad. Si es verdadero, se ha llamado a Ejecutar y puede asumir que una aplicación WinForms se está ejecutando de la siguiente manera.Referencia: ¿Por qué Application.Exit no funcionaría?
fuente
Application.Exit()no pudo salir de la aplicación, peroEnvironment.Exit(1)funcionó de maravilla.Environment.Exit(0)cualquier valor distinto de cero debe ser un código de error específico de la aplicación que podría ser utilizado por un script para tomar las medidas apropiadas. (Esto es nuevo código y una aplicación de Windows Forms, por lo que es poco probable que importa en este caso, pero bueno saber para escribir cualquier herramientas de línea de comandos.)Environment.Exittambién se puede usar para la aplicación de formularios.returndeclaración posterior mejoraría mucho este enfoque. Como entendí, el código continuaría ejecutándose después deApplication.Exit()hasta unareturndeclaración.Sé que este no es el problema que tuvo, sin embargo, otra razón por la que esto podría suceder es que tiene un hilo de fondo abierto en su aplicación.
Cuando
IsBackgroundsefalseva a mantener su programa abierto hasta que se complete el hilo, si se estableceIsBackgroundquetrueel hilo no se mantendrá el programa abierto. Cosas comoBackgroundWoker,ThreadPoolyTasktodos usan internamente un hilo conIsBackgroundset totrue.fuente
Todo lo que necesitas es
System.Environment.Exit(1);Y usa el espacio de nombres del sistema "usando el sistema" que casi siempre está ahí cuando comienzas un proyecto.
fuente
Yo haría cualquiera de los siguientes:
para una forma de victoria o
para una aplicación de consola (también funciona en winforms).
¡Gracias!
fuente
En resumen, si. La aplicación completa finalizará cuando el formulario principal (el formulario que se inició a través
Application.RundelMainmétodo) esté cerrado (no oculto).Si su aplicación completa siempre debe terminar por completo cada vez que se cierra su formulario principal, entonces solo debe eliminar ese controlador cerrado de formulario. Al no cancelar ese evento y simplemente dejar que se formen cuando el usuario lo cierra, obtendrá el comportamiento deseado. En cuanto a todos los otros formularios, si no tiene la intención de mostrar la misma instancia del formulario nuevamente, simplemente déjelos cerrar, en lugar de evitar el cierre y ocultarlos. Si los está mostrando nuevamente, entonces ocultarlos puede estar bien.
Si desea que el usuario haga clic en la "x" para su formulario principal, pero que otro formulario permanezca abierto y, en efecto, se convierta en el "formulario principal" nuevo, entonces es un poco más complicado. En tal caso, deberá ocultar su formulario principal en lugar de cerrarlo, pero deberá agregar algún tipo de mecanismo que realmente cierre el formulario principal cuando realmente desee que su aplicación finalice. Si esta es la situación en la que se encuentra, deberá agregar más detalles a su pregunta que describa qué tipos de aplicaciones deberían y no deberían finalizar el programa.
fuente
Haces:
en su Main ()?
Me pareció una forma muy fácil de eliminar la aplicación cuando se cierra el formulario.
fuente
fuente
En este caso, la forma más adecuada de salir de la aplicación para anular el método onExit () en App.xaml.cs:
fuente