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 MessageBox
Alerts.
Lo intenté Application.Exit
pero todavía llama a todas las ventanas y alertas secundarias y no sé cómo usar Environment.Exit
y qué número entero poner en él.
Por cierto, cada vez que mis formularios llaman al evento formclosed
o form closing
cierro 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.Run
se ha llamado al verificar laSystem.Windows.Forms.Application.MessageLoop
propiedad. 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.Exit
también se puede usar para la aplicación de formularios.return
declaración posterior mejoraría mucho este enfoque. Como entendí, el código continuaría ejecutándose después deApplication.Exit()
hasta unareturn
declaració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
IsBackground
sefalse
va a mantener su programa abierto hasta que se complete el hilo, si se estableceIsBackground
quetrue
el hilo no se mantendrá el programa abierto. Cosas comoBackgroundWoker
,ThreadPool
yTask
todos usan internamente un hilo conIsBackground
set 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.Run
delMain
mé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