2009-03-03 11 views
31

Actualmente estoy escribiendo una aplicación WPF que maneja los argumentos de línea de comandos en App.xaml.cs (que es necesario porque el evento de inicio parece ser la forma recomendada de obtener en esos argumentos). Basándome en los argumentos, quiero salir del programa en ese momento que, hasta donde yo sé, debe hacerse en WPF con Application.Current.Shutdown() o en este caso (como estoy en el objeto de la aplicación actual) probablemente también solo this.Shutdown().Apagar una aplicación WPF de App.xaml.cs

El único problema es que esto no parece funcionar bien. He avanzado con el depurador y el código después de que la línea Shutdown() todavía se ejecuta, lo que lleva a errores posteriores en el método, ya que esperaba que la aplicación no durara tanto. Además, la ventana principal (declarada en el atributo StartupUri en XAML) aún se carga.

He comprobado la documentación de ese método y no he encontrado nada en las observaciones que me digan que no debo usarlo durante Application.Startup o Application.

Entonces, ¿cuál es la forma correcta de salir del programa en ese momento, i. mi. el controlador de eventos Startup en un objeto Application?

+1

¿Cuáles son los errores que está obteniendo? Por favor actualice su pregunta. –

+0

Haga clic en [Aquí] (http://stackoverflow.com/a/6602102/2342414) para obtener una respuesta simple y funcional – benshabatnoam

Respuesta

46

saca primero la propiedad de StartupUri App.xaml y luego utilizar el 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); 
     } 
    } 
+0

Aún no funciona bien :( Específicamente obtengo NullReferenceExceptions en el constructor de la ventana principal, que puede ser fácilmente eludido. Pero por lo que yo entiendo cerrando la aplicación debería funcionar sin instanciar la ventana a la que hace referencia StartupUri. – Joey

+4

Cambié mi respuesta para mostrarle cómo puede evitar que se cree su ventana principal. Es importante que primero elimine StartupUri de App.xaml. –

+1

Gracias. Funciona ahora. Pero me parece poco intuitivo que el StartupUri siempre se cargue independientemente de si la aplicación ya debería haber salido. – Joey

8

Si se quita la StartupUri de App.xaml para una aplicación con un MainWindow que necesita para asegurarse de que hace lo siguiente llame a su método OnStartup; de lo contrario, la aplicación no finalizará cuando se cierre su MainWindow.

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

@Frank Schwieterman, algo en esta línea puede ayudarle con el problema de la ventana de la consola.

+1

salvavidas! ¡Gracias! – Pascal

+0

IMNSHO: Esta es la respuesta correcta a esta pregunta ... –

+0

Esta página detalla los procedimientos de inicio y apagado de WPF muy claramente ... http://www.blackwasp.co.uk/WPFStartupShutdown.aspx –