En los pocos años que he estado usando C # (Windows Forms), nunca he usado WPF. Pero ahora amo WPF, pero no sé cómo se supone que salga de mi aplicación cuando el usuario hace clic en el elemento del menú Salir del menú Archivo.
Yo he tratado:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
Entre muchos otros. Nada funciona.
Application.Current.Shutdown();
su función no volverá inmediatamente. Necesitas llamarreturn;
también para esto.Application
NO es una clase estática. Tener unApplication.Current
miembro estático no significa que sea estático. En cambio, es una clase normal que se puede derivar.Si realmente lo necesita para cerrar, también puede usar Environment.Exit () , pero no es nada gracioso (más bien como finalizar el proceso).
Úselo de la siguiente manera:
fuente
Environment.Exit()
necesita al menos un parámetro, un código de salida. ÚseloEnvironment.Exit(0)
si no le preocupa el código de salida.Application.Current.Shutdown();
Application.Current.Shutdown();
miClosing
evento se llamó, cuando simplemente quería cerrar mi aplicación de inmediato. EntoncesEnvironment.Exit(0);
fue la mejor opción.Como wuminqi dijo ,
Application.Current.Shutdown();
es irreversible, y creo que generalmente se usa para forzar a una aplicación a cerrarse en momentos como cuando un usuario está cerrando sesión o cerrando Windows.En su lugar, llame
this.close()
a su ventana principal. Esto es lo mismo que presionar Alt+ F4o el botón cerrar [x] en la ventana. Esto hará que se cierren todas las demás ventanas de propiedad y terminará llamandoApplication.Current.Shutdown();
siempre que no se cancele la acción de cierre. Consulte la documentación de MSDN sobre Cómo cerrar una ventana .Además, debido a que
this.close()
es cancelable, puede colocar un diálogo de confirmación de guardar cambios en el controlador de eventos de cierre. Simplemente haga un controlador de eventos para<Window Closing="...">
y cambie ene.Cancel
consecuencia. (Consulte la documentación de MSDN para obtener más detalles sobre cómo hacer esto).fuente
Use cualquiera de los siguientes según sea necesario:
1)
2)
Sobre todo, los métodos llamarán
closing event
a laWindow
clase y la ejecución puede detenerse en algún momento (porque generalmente las aplicaciones colocan diálogos como '¿estás seguro?' O ' ¿Te gustaría guardar datos antes de cerrar? ', Antes de que una ventana se cierre por completo)3. Pero si desea finalizar la aplicación sin previo aviso de inmediato. Use a continuación
fuente
Esto debería funcionar:
Si está interesado, aquí hay material adicional que encontré útil:
Detalles sobre la solicitud. Actual
WPF Application LifeCycle
fuente
Así es como hago el mío:
Solo llamo
Application.Current.ShutDown()
desde la ventana principal de la aplicación, todas las demás ventanas usanthis.Close()
. En mi ventana principal,Window_Closing(...)
maneja elx
botón superior derecho . Si alguno de los métodos requiereWindow_Closing(...)
cerrar la ventana, toma el evento para apagarlo si el usuario lo confirma.La razón por la que lo uso
Application.Current.Shutdown()
en mi ventana principal es que he notado que si se cometió un error de diseño y no he declarado un padre de una de mis ventanas en una aplicación, si esa ventana se abre sin que se muestre previamente hasta el último cierre activo de la ventana, me quedo con una ventana oculta ejecutándose en segundo plano. La aplicación no se cerrará. La única forma de evitar una pérdida total de memoria es que vaya al Administrador de tareas para cerrar la aplicación.Application.Current.Shutdown()
me protege de defectos de diseño no intencionados.Eso es de mi experiencia personal. Al final, use lo que sea mejor para su escenario. Esta es solo otra información.
fuente
No debe haber un
Application.ShutDown();
o.Exit()
mensaje.Application
Es una clase estática. No se refiere a la aplicación actual. Debe acceder a la aplicación actual y luego cerrarla de esta manera:fuente
Otra forma de hacer esto:
Esto forzará a matar su aplicación. Siempre funciona, incluso en una aplicación multiproceso.
Nota: Solo tenga cuidado de no perder datos no guardados en otro hilo.
fuente
fuente
Tratar
Para mi
no funcionó
fuente
Según tengo entendido,
Application.Current.Shutdown()
también tiene su inconveniente.Si desea mostrar una ventana de confirmación para permitir que los usuarios confirmen al salir o no,
Application.Current.Shutdown()
es irreversible.fuente
Application.Current.Shutdown()
Sin embargo, podemos obtener la confirmación del usuario antes de llamar .Resumiendo, hay algunas maneras de hacerlo.
1) Eliminar el proceso, que omite la finalización, el manejo de errores, etc.
2) Cerrar la aplicación actual, que probablemente sea la forma correcta porque llama a los eventos de salida:
o
(cuando se incluye en una instancia de App-class)
3) Cierre de la aplicación actual (todos los formularios deben cerrarse / terminarse antes):
(cuando se incluye en una instancia de App-class)
4) Salir del entorno, que finaliza la aplicación:
Además, es posible que desee leer sobre estadísticas de salida aquí
fuente
Caliburn micro saborizado
fuente
Si desea salir de otro hilo que no creó el objeto de la aplicación, use:
fuente
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
fuente
Desde el código xaml puede llamar a un SystemCommand predefinido:
Creo que esta debería ser la forma preferida ...
fuente