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

C# Discussion :

[C#] Sortie inconditionnelle de l'application


Sujet :

C#

  1. #1
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut [C#] Sortie inconditionnelle de l'application
    Bonjour à tous,

    J'aimerais trouver le pendant identique au exit() en C.

    J'ai déjà essayé un Application.Exit() , mais celà n'a aucun effet sur le traitement puisque l'exécution continue jusqu'au final.

    Donc, en résumé, une séquence de sortie inconditionnelle de l'application renvoyant un code interprétable par le système d'exploitation.

    Merci d'avance pour vos réponses.

  2. #2
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Une façon "propre", jetter une exception qui n'est catchée que dans le main.

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par cortex93
    Une façon "propre", jetter une exception qui n'est catchée que dans le main.
    C'est vrai
    Cependant je ne m'explique pas pourquoi Application.Exit() ne fonctionnerait pas car c'est en sorte la même chose sauf qu'à la place d'une exception c'est un event qui est declenché.
    Le traitement en cours dont parle notre collègue ne serait-il pas dans un autre thread :

  4. #4
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    En fait, je ne veux pas une "façon propre" de quitter le programme...
    Je veux faire un kill de l'application en gros ou la même chose que le stop en mode debug.

    C'est un peu comme le bouton d'urgence... On arrête tout ce qui est en traitement, on sort.

    Une idée?

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Piet
    En fait, je ne veux pas une "façon propre" de quitter le programme...
    Je veux faire un kill de l'application en gros ou la même chose que le stop en mode debug.

    C'est un peu comme le bouton d'urgence... On arrête tout ce qui est en traitement, on sort.

    Une idée?
    Oui ok mais qui/quoi décide de cette sortie, une action utilisateur ... autre chose : de plus ce traitement est-il dans le thread principal ou à part
    (Nous parlons bien d'une Application Windows : )

  6. #6
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par neguib
    Oui ok mais qui/quoi décide de cette sortie, une action utilisateur ... autre chose : de plus ce traitement est-il dans le thread principal ou à part
    (Nous parlons bien d'une Application Windows : )
    Ce qui décide de cette sortie inconditionnelle serait le résultat d'un test d'une boucle d'une fonction récursive.

    C'est bien dans une application windows, mais c'est avant que le design ne s'affiche (la fonction main récupère les arguments, et commence le traitement d'une fonction appelant une autre fonction appelant .... qui finallement appelle la fonction récursive pré-citée et dont je voudrais arrêter le traitement dans un certain cas (retour particulier d'une fonction).

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ben si t'es dans le Main c'est bien que tu es avant le fameux Application.run etc..
    donc conditionne tout simplment cette application.Run au résultat souhaité sinon rien et basta
    voilà

  8. #8
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Hum... je ne suis pas convaincu... mais ce n'est pas grave, j'vais faire une cascade de retours pour générer une sortie de programme...

    Merci pour l'intérêt que tu as porté à ma bête question...
    ++

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Si tu veux être certain de la fin de ton processus, tu peux réaliser l'action suivante (très brutale)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		static void Kill() 
    		{
    			System.Diagnostics.Process proc = System.Diagnostics.Process.GetProcessById(System.Diagnostics.Process.GetCurrentProcess().Id);
    			proc.Kill();
    		}
     
    		private void ACTION_Click(object sender, System.EventArgs e)
    		{
    			Kill();
    		}
    Quand penses tu? Le processus du nom du processus courant est supprimé avec tous ses threads courants.

    C'est différent de Application.Exit() dans la mesure ou (théoriquement) il n'y a pas toutes les instructions qui lui sont liées

    Voyons en désassemblage ce que contient Application.Exit()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public static void Exit()
    {
          IntSecurity.AffectThreadBehavior.Demand();
          lock (typeof(Application))
          {
                if (Application.exiting)
                {
                      return;
                }
                Application.exiting = true;
                try
                {
                      Application.ThreadContext.ExitApplication();
                }
                finally
                {
                      Application.exiting = false;
                }
          }
          Application.CollectAllGarbage();
    }
    Le code est assez direct.

  10. #10
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Acalon
    Si tu veux être certain de la fin de ton processus, tu peux réaliser l'action suivante (très brutale)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		static void Kill() 
    		{
    			System.Diagnostics.Process proc = System.Diagnostics.Process.GetProcessById(System.Diagnostics.Process.GetCurrentProcess().Id);
    			proc.Kill();
    		}
     
    		private void ACTION_Click(object sender, System.EventArgs e)
    		{
    			Kill();
    		}

    Impeccable!!!! C'est exactement ça que je cherchais... merci beaucoup. :-D

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/07/2012, 23h04
  2. Sortie inconditionnelle dans un sous VI
    Par rabahdahmani dans le forum LabVIEW
    Réponses: 1
    Dernier message: 28/02/2012, 14h52
  3. Estimer les entrées/sorties disque d'une application
    Par lavazavio dans le forum Administration système
    Réponses: 4
    Dernier message: 14/01/2011, 09h36
  4. Forcer la sortie du main dune application Console
    Par grinder59 dans le forum C#
    Réponses: 4
    Dernier message: 30/01/2009, 14h09
  5. Sortie d'une application dès
    Par Depteam1 dans le forum MFC
    Réponses: 4
    Dernier message: 13/09/2005, 13h16

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