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 :

Exit Thread qui ne ferme rien


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Par défaut Exit Thread qui ne ferme rien
    Bonjour,

    J'utilise un ExitThread pour quitter mon application lorsque que j'appui sur le bouton quitter : cela fonctionne très bien.

    Mais j'ai un parametre que je vais chercher dans ma base de bonnées, s'il est à false, alors les nouveaux utilisateurs ne sont pas ajoutés automatiquement.

    Comme je ne suis pas dans la base des user, une Messagebox me dit que je ne peut pas accéder à l'appli et là normalement l'appli devrai se fermer car j'appelle la fonction ExitThread.

    J'ai compilé pas à pas, il passe bien là ou je veux mais il ne ferme rien.

    Je me disais qu'il était peut être impossible de faire un ExitThread dans l'initiation?

    Surveillant est mon contexte qui est "Runné" dans mon Main :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     
    public class Surveillant : ApplicationContext
        {
     
    (...)
            public Surveillant()
            {
                RecupParametre();
                Profil();
                formCount = 0;
     
                oMenu = new Menu(this);
     
                ConsultSearch = new F_ConsultSearch(this);
                ConsultSearch.Closed += new EventHandler(OnFormClosed);
                formCount++;
     
                ConsultRef = new F_ConsultRef(this, false);
                ConsultRef.Closed += new EventHandler(OnFormClosed);
                formCount++;
     
                oMenu.Show();
                ConsultRef.Show();
                ConsultSearch.Show();
     
                this.MiseAJours += new Surveillant.MiseAJoursHandler(ConsultRef.OnMiseAJours);  
            }
     
            public void RecupParametre()
            {
                SqlDataAdapter m_daDataAdapter;
                SqlConnection ConsultConnection = new SqlConnection(strConnexionSecurite);
                m_daDataAdapter = new SqlDataAdapter("RecupParametre", ConsultConnection);
                m_daDataAdapter.Fill(TableParametre);
                ConsultConnection.Close();
            }
     
            public void Profil()
            {
    //On cherche si la personne connectée est inscrite dans la base des user
                SqlDataAdapter m_daDataAdapter;
                DataTable MaDataTable = new DataTable();
     
                SqlConnection ConsultConnection = new SqlConnection(strConnexionSecurite);
                m_daDataAdapter = new SqlDataAdapter("RecupProfil '" + LoginUser + "';", ConsultConnection);
                m_daDataAdapter.Fill(MaDataTable);
                ConsultConnection.Close();
     
                if (MaDataTable.Rows.Count != 0)
                {
    // Le user est dans la base alors on prend en compte son profil
                    IdProfil = (int)MaDataTable.Rows[0]["User_Profil_Id"];
                }
     
                else if (TableParametre.Rows[0]["Valeur"].ToString() == "True")
                {
                    //On va récupérer dans l'active directory le nom de la personne connectée puis on ajoute le user avec le profil de sécurité le plus faible
    (...)
                }
                else
                {
    // Comme la personne n'est pas dans la base et que l'on ajoute pas les user automatiquement alors on lui dit qu'il ne peut pas accéder à l'appli et on ferme.
     
                    MessageBox.Show("Vous n'êtes pas autorisé à utiliser cette application.");
                    ExitThread();
                }
                ConsultConnection.Close();    
            }
     
            public void OnFormClosed(object sender, EventArgs e)
            {
                formCount--;
                if (formCount == 0)
                {
                    ExitThread();
                }
            }
    Et voici le code après le clique sur le bouton quitter qui marche bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            private void Exit_Click(object sender, EventArgs e)
            {
                DialogResult Quitter = MessageBox.Show("Voulez vous vraiment quitter l'application ?", "Quitter", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
                if (Quitter == DialogResult.Yes)
                {
                    oSurveillant.ExitThread();
                }
            }
    Merci d'avance si vous avez une idée

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 658
    Par défaut
    Faites comme tout le monde, appelez Close sur le formulaire principal.

  3. #3
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Le problème étant ici que de formulaire principale il n'y a pas, vu que l'application démarre via un ApplicationContext et non une Form.
    L'applicationContext ne contient donc pas de méthode Close, mais son ExitThread() est censé mettre fin à l'application, donc tout fermer.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #4
    Membre éclairé Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Par défaut
    c'est exactement ça le problème.

    A force laedit tu dois mieux connaitre mon appli que moi!

  5. #5
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Nan, j'en suis quand même pas encore à ce point

    Pour en revenir à ton problème, je pense comme toi que l'appel à la méthode ExitThread() ne fonctionne pas car elle est appelée dans le constructeur de l'ApplicationContext.

    Du coup, il faudrait que tu utilise une variable de classe, un booléen ferait très bien l'affaire, que tu mettrais à false pour indiquer que l'application n'as pas démarrer et qu'il faut la fermer. Et dans un de tes formulaire, dans l'événement shown, tu vérifie si le booléen est à false et dans ce cas tu appelle la méthode ExitThread du Surveillant.

    En me relisant, ça me paraît un brin complexe pour un truc comme ça, mais bon...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  6. #6
    Membre éclairé Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Par défaut
    Ca fonctionne super bien , merci!

    Bien pratique cet événement Shown !

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

Discussions similaires

  1. Requete OR qui ne ramene rien
    Par Sapience dans le forum Langage SQL
    Réponses: 10
    Dernier message: 14/04/2005, 12h12
  2. [C#] [MSDE] Connexion qui se ferme après appel de fonction
    Par trotters213 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 23/03/2005, 16h30
  3. procédure stockée qui ne fait rien
    Par trotters213 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 20h25
  4. [Thread] comment arreter un thread qui execute une methode b
    Par Cyber@l dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 04/08/2004, 10h51
  5. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 19h38

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