2011-07-06 9 views
5

Je vérifie si l'utilisateur Windows authentifié est un utilisateur valide pour mon application wpf ou non.Application.Current.Shutdown (-1) ne pas fermer l'application WPF

Sinon, j'ai besoin de fermer l'application; mais même après l'exécution de Application.Current.Shutdown (-1), l'application continue à s'exécuter avec bonheur.

Le lien ci-dessous indique que je dois supprimer mon StartUpURI; mais je n'ai pas ce tag dans mon app.xaml. ->Shutting down a WPF application from App.xaml.cs

EDIT: - J'ai ce code dans App.xaml.cs ->

protected override void OnStartup(StartupEventArgs e) 
     { 
      base.OnStartup(e); 

      this.exceptionPolicy = ConfigurationManager.AppSettings.Get("ExceptionPolicy"); 
      this.displayErrorDetails = true; 
      this.container = new UnityContainer(); 

      // Register services and types in Unity 
      RegisterServices(); 

      // Check user 
      if (!IsValidUser()) 
      { 
       //Application.Current.Shutdown(); 
       App.Current.Shutdown(); 
      } 

     } 
+2

Vous devez afficher le code entourant 'Application.Current.Shutdown()'. Le problème peut être lié à l'endroit d'où vous l'appelez. –

+0

Mon code se trouve dans App.Xaml -> OnStartup (StartupEventArgs e) – Relativity

+2

Pouvez-vous publier tout le contenu de votre fichier App.xaml.cs? – NickHeidke

Répondre

11

Utilisez Environment.Exit() à la place. Cela va essayer de s'arrêter gracieusement, mais s'il ne peut pas gracieusement, il fermera brutalement - mettant fin aux discussions avec force.

+0

Environment.Exit() fonctionne ... mais rencontre des problèmes dans DisPose() – Relativity

+1

Eh bien oui - vous devez d'abord appeler explicitement Dispose() sur vos objets, puisque Environment.Exit mettra fin à vos threads. Application.Current.Shutdown n'appelle pas Dispose non plus; rien ne le fera. Il n'y a pas d'élimination automatique dans .net. –

0

Je n'ai jamais eu de chance d'arrêter quelque chose dès le démarrage. Je suggère de commencer un nouveau thread qui, après un bref délai, arrête l'application en utilisant un code similaire à celui que vous avez dans votre échantillon.