Actualmente estoy escribiendo una aplicación de WPF que hace el argumento de línea de comandos de manejo de la Aplicación.xaml.cs (la cual es necesaria debido a que el evento de Inicio parece ser la forma recomendada de llegar a los argumentos). Basado en los argumentos que desea salir del programa en ese momento ya que, hasta donde yo sé, debe ser hecho en WPF con Application.Current.Shutdown() o en este caso (como yo lo soy en la aplicación actual de objeto) probablemente también acaba de this.Shutdown().

El único problema es que esto no parece funcionar bien. Me he metido con el depurador de código y después de la Shutdown() línea todavía se ejecuta lo que conduce a errores después en el método, ya que esperaba que la aplicación no vivir tanto tiempo. También la ventana principal (declarado en el StartupUri atributo en XAML) todavía se carga.

Lo he comprobado en la documentación de ese método y no ha encontrado nada en los comentarios que me dicen que no debo usarlo durante Application.Startup o Application a todos.

Así que, ¿cuál es el camino correcto para salir del programa en ese punto, i. e. el Startup controlador de eventos en un Application objeto?

  • ¿Cuáles son los errores que estás recibiendo? Por favor, actualice su pregunta.
  • Haga clic en Aquí para una simple y trabajando respuesta
InformationsquelleAutor Joey | 2009-03-03

2 Comentarios

  1. 54

    Quitar primero la StartupUri propiedad de la App.xaml y, a continuación, utilice la siguiente:

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
    
            bool doShutDown = ...;
    
            if (doShutDown)
            {
                Shutdown(1);
                return;
            }
            else
            {
                this.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
            }
        }
    • Todavía no funciona bien 🙁 en Concreto me estoy poniendo NullReferenceExceptions en la ventana principal del constructor, que puede evitarse fácilmente. Pero como tengo entendido que cerrar la aplicación debería funcionar sin instanciar la ventana que hace referencia StartupUri.
    • He cambiado mi respuesta a mostrar cómo se puede evitar su ventana principal para ser creado. Es importante que quite primero el StartupUri de Aplicación.xaml.
    • Gracias. Funciona ahora. Pero me parece algo poco intuitivo que el StartupUri se carga siempre, independientemente de que la aplicación ya debería de haber salido.
    • Esto no funciona si usted está tratando de cerrar InitApplication(), como en mi caso. Incluso si StartupUri es null, lo que ya es en mi caso, porque yo no tengo ninguna ventana principal, this.Shutdown() no tiene ningún efecto.
    • InitApplication() se ejecuta antes de OnStartup(), así que tenemos que fijar un valor booleano durante InitApplication(), a continuación, llamar return, y verifique que el operador booleano en OnStartup() y, a continuación, salga como el anterior.
    • Cuando hago esto, el programa se cierra, pero la ventana de la consola no volver a dibujar la consola. raro.

  2. 9

    Si se quita la StartupUri de aplicación.xaml para una aplicación con una ventana principal que usted necesita para asegurarse de que la siguiente llamada en tu OnStartup método de lo contrario la aplicación no terminará cuando tu ventana principal se cierra.

    this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;

    @Frank Schwieterman, algo a lo largo de estas líneas puede ayudarle con su ventana de la consola en cuestión.

Dejar respuesta

Please enter your comment!
Please enter your name here