Pourquoi ce code lance deux instances d'un programme ?

mrmadoverclocker Messages postés 7 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 24 mai 2014 - Modifié par Whismeril le 20/05/2014 à 19:59
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 24 mai 2014 à 13:57
Bonjour à tous,

Je suis débutant en C# et je souhaite savoir pourquoi le code ci-dessous se lance deux fois.
J'utilise le même code dans une autre solution et il ne se lance qu'une seule fois.
Pourriez-vous m'expliquer pourquoi ?
Merci par avance !

private void Button13_Click(object sender, EventArgs e) // TEST
 {
            System.Diagnostics.Process.Start("test.exe");
 }

10 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
20 mai 2014 à 19:59
Bonjour tout d'abord je me permets de modifier ton message pour mettre la coloration syntaxique. Voir ici comment l'utiliser pour la prochaine fois.

Ensuite le code que tu montres devrais lancer une seule instance de test.
Sans plus d'éléments je ne peux émettre que des hypothèses:
-soit quelque par dans ton programme tu appelles la méthode Button13_Click, ailleurs que par l'action sur le bouton
-soit la méthode est abonnée deux fois à l'événement (cherche le code
button13.Click += Button13_Click....
)
-soit test.exe se relance lui même au démarrage.


1
mrmadoverclocker Messages postés 7 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 24 mai 2014
20 mai 2014 à 23:08
Bonjour Whismeril,

Tout d'abord, merci pour la coloration syntaxique !
En effet, c'est plus lisible. :)
Ensuite, un grand merci pour ton analyse.
Après vérification, il se pourrait que ce soit le 2ème cas.
Le 3ème est à exclure, car, peu importe le programme lancé, il y a toujours 2 instances lancées.
Concernant le fait que la méthode pourrait être appelée ailleurs, j'ai vérifié, ce n'est pas le cas.
Voici ce que j'ai trouvé dans le code :
this.Button13.Click += new System.EventHandler(this.Button13_Click);
Est-ce que ça confirme ta seconde hypothèse ?
D'après mes recherches, je tombe sur cette page :
http://www.csharp-station.com/Articles/EventHandlingInCSharp.aspx
J'ai du mal à saisir.
Merci pour ton aide.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
21 mai 2014 à 07:11
Bonjour, si tu ne l'as trouvé qu'une fois non.

Je te propose de mettre un point d'arrêt.

Tu lances le programme, et tu vérifies si cette ligne est exécutée 2 fois.
Si oui tu refaits, après le passage de cette ligne tu exécutes en pas à pas détaillé, ça va te permettre de voir qui a appelé la méthode en question.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
21 mai 2014 à 11:09
Un précision pour la recherche de button13.Click += , tu dois chercher dans le code du formulaire (par exempe dans Form1.cs) et dans le code du designer (Form1.Designer.cs).
Il doit normalement se trouver une fois dans le designer, c'est Visual Studio qui l'écrit pour toi quand en mode création tu double cliques pour la première fois sur un bouton.
0
mrmadoverclocker Messages postés 7 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 24 mai 2014
21 mai 2014 à 16:05
Bonjour,

J'ai mis un point d'arrêt comme tu me l'as conseillé.
Là, le programme n'est exécuté qu'une seule fois, c'est à n'y rien comprendre.
Pour la recherche de button13.Click +=, j'avais cherché dans toute la solution, et effectivement, cette ligne n'est présente qu'une seule fois dans le designer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mrmadoverclocker Messages postés 7 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 24 mai 2014
23 mai 2014 à 22:33
Pas d'idée ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 mai 2014 à 07:37
Non désolé.
Quand tu enlèves le point d'arrêt deux instances et quand il y est une seule, c'est bien ça?

Si tu lances l'exe présent dans début, ou relevés ça se comporte comment?

Sinon, supprime le bouton, la méthode, et refais......
0
mrmadoverclocker Messages postés 7 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 24 mai 2014
24 mai 2014 à 12:02
Ben en fait, je met le point d'arrêt sur ça :
        private void Button13_Click(object sender, EventArgs e) // TEST
{
Process.Start("CMD.EXE");
}
Pendant le debugging, cmd.exe ne démarre qu'une seule fois.
Par contre, je n'ai pas précisé, le problème ne concerne pas qu'un seul bouton, mais tous les boutons de la solution. ??
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 mai 2014 à 12:05
Je viens m'apercevoir que le correcteur automatique m'avait bousillé ma question.....

Quand tu compiles ton programme, un exe est écrit dans le répertoire debug ou release.
Quand tu lances cet exe comment ça se comporte?
0
mrmadoverclocker Messages postés 7 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 24 mai 2014
24 mai 2014 à 13:14
En fait, le comportement que j'ai décrit, c'est à dire que les programmes se lancent 2 fois lorsque l'on clique sur le bouton, se produit lorsque je lance l'exe issu de la compilation :(
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 mai 2014 à 13:57
Bon, tentons un truc un peu radical.
Tu crées un nouveau projet, dans lequel tu ajoutes tous tes formulaires et toutes tes classes.
Et tu nous dis....
0
Rejoignez-nous