IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Fermer application depuis le programme


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Fermer application depuis le programme
    Bonjour

    Je viens d'etre confronté a une petite difficulté que je n'avais jamais apréhendé

    - Fermer l'application depuis le programme

    1- J'ai rapidement compris que le this.Close() meme dans la form principale ne suffit pas car il faut de toute façon remonter tout le stack d'appel, c'est donc fort lourd a gerer

    2- J'ai cru m'en sortir avec Application.Exit() mais cela n'arrete pas les process en cours et je me demande en definitive a qoui ca sert ?

    3- Je me suis alors retourné vers Environment.Exit() qui fait l'affaire !

    Avez vous des conseils ou remarques sur le sujet ?

    Merc

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Comment ouvre tu ta fenetre?
    Tu parle de process, mais il me semble qu'une fois que tu as lancé un process, il est autonome : il ne se fermera pas si tu ferme ton appli, puisque qu'il ne fait pas parti du process de ton appli (c'est un autre programme), non?
    Lance tu vraiment d'autres process par ton appli?

    Je ne maitrise pas tres bien la chose, mais si je l'ouvre par un Application.Run(new MaForm());
    et que je rempli bien son dispose comme il faut pour liberer ce qui doit l'etre, un Application.Exit(); fonctionne tres bien chez moi.

    La où j'ai plus de difficultés c'est que des fois je n'arrive pas à intercepter des exceptions dans mon Main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
         Application.Run(new MaForm());
    }
    catch(Exception err)
    {
         //Il m'est arriver que certains de mes projets plante sans passer par ici.
         Messagebox.Show(err.ToString());
    }

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Prenons un exemple par l'absurde

    Si je considere ta MaForm()

    Dans le constructeur de ta MaForm() on appelle initializecomponent

    Si AVANT cet initializecomponent je fais this.Close() je plante l'application et c'est normal, je ne peux faire un close que si la forme est construite et sans process en execution

    Si AVANT cet initializecomponent je fais Application.Exit() c'a n'a aucun effet et ca me laisse déja plus perplexe

    Mais si AVANT cet initializecomponent je fais Environment.Exit(1) j'arrete effectivement l'application

    Je mr demande donc dans quel contexte Application.Exit peut etre appelé au lien de Environment.Exit

    L'exemple ci desus n'a evidemment pas de sens mais je l'ai pris pour illustrer a l'extreme les differents comportements.

  4. #4
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    La méthode Application.Exit arrête toutes les boucles de messages en cours sur tous les threads et ferme toutes les fenêtres de l'application. Elle ne force pas nécessairement la fermeture de l'application. La méthode Exit est généralement appelée à partir d'une boucle de messages et force le retour de Run. Pour quitter une boucle de messages du thread en cours uniquement, appelez ExitThread.

    Exit déclenche les événements suivants et exécute les opérations conditionnelles associées :

    Un événement FormClosing est déclenché pour chaque formulaire représenté par la propriété OpenForms. Il peut être annulé en affectant true à la propriété Cancel de leur paramètre FormClosingEventArgs.

    Si un ou plusieurs gestionnaires annulent l'événement, Exit est retourné sans action supplémentaire. Sinon, un événement FormClosed est déclenché pour chaque formulaire ouvert, et les boucles et les formulaires de messages en cours d'exécution sont fermés.
    Environment.exit() lui, kill le processus...

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Oui

    Tu recopie simplement l'explication de msdn
    Mais peux tu grace a cette explication expliquer (entre autre) pourquoi Application.Exit() n'a aucun effet dans le contructeur de la form principale, avant InitializeComponent ?

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Bien sûr que c'est le msdn... c'est pourquoi je l'ai mis en citation...
    En fait je voulais surtout répondre à cela:

    Je mr demande donc dans quel contexte Application.Exit peut etre appelé au lien de Environment.Exit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une application depuis un programme C++
    Par johnkay dans le forum Débuter
    Réponses: 3
    Dernier message: 21/12/2011, 18h14
  2. Réponses: 3
    Dernier message: 17/01/2009, 20h47
  3. Réponses: 3
    Dernier message: 31/08/2008, 16h33
  4. Réponses: 2
    Dernier message: 08/12/2006, 12h51
  5. Réponses: 5
    Dernier message: 20/02/2006, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo