Sortir d'un évênement button_click à travers un autre évênement

cs_elise42 Messages postés 7 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 24 novembre 2009 - 23 nov. 2009 à 12:28
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 28 nov. 2009 à 20:29
Bonjour,

je code actuellement sous Winform C++, et j'ai plusieurs évènements button_click.

Lorsque je suis rentrer dans l'évènement button8_Click, si je viens à cliquer sur button7 alors que l'évènement button8_Click n'est pas terminer, je voudrait sortir de l'évènement button8_Click immédiatement sans que ce dernier évènement ne soit fini...

Es ce possible?
Merci d'avance

6 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
23 nov. 2009 à 13:30
Je ne sais pas comment se passe la gestion d'événements en winforms, mais les événements sont sans doute traités un par un.
Par contre, tu peux mettre ta tâche à effectuer dans un thread; ainsi l'événement b8_click aura simplement à lancer le thread puis retourner immédiatement, pendant que le traitement s'effectuera; dans la procédure pour le bouton 7, il suffira alors d'arrêter le thread.
Fonctions utiles de l'API : CreateThread(), TerminateThread()...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 nov. 2009 à 20:23
JAMAIS d'appel direct aux fonctions de l'API sur les threads, que ce soit pour C++ comme depuis de l'interprété (le cas ici). C'est fuites mémoire à tout coup quand ce n'est pas plantage direct. Aucun constructeur de classe n'est appelé, destructeur idem.

ciao...
BruNews, MVP VC++
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
23 nov. 2009 à 21:20
Euh... quoi? J'ai simplement suggéré de lancer un thread lors du click sur le bouton, je vois pas le problème? Bien sûr, faut faire attention à ce qu'on fait dans le thread, mais à part ça...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 nov. 2009 à 21:47
ben mais c'est là le proB
En .net on ne code pas vraiment, ce sont des classes absolument pour tout.
CreateThread() est donc à oublier.

Pour ce qui est de TerminateThread(), aucun code (du vrai) propre ne devrait jamais l'utiliser.

ciao...
BruNews, MVP VC++
0

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

Posez votre question
cs_elise42 Messages postés 7 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 24 novembre 2009
24 nov. 2009 à 08:44
Merci pour vos réponses,
mais au final ça répond pas à mon problème
Quelqu'un a t'il une idée?
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
28 nov. 2009 à 20:29
Salut,

Comme l'a fait remarqué juju12 :

Tant que le code de button8_click est en cours d'exécution, tu ne peux pas cliquer sur button7 (Soit dit en passant : nomme tes contrôles !), car le thread principal ne peut pas s'occuper l'UI et exécuter le code de button8_click simultanément.

La solution est de créer un second thread dans le code de button8_click, thread qui va lui même faire le boulot couteux en temps.

Le code du button7 quant à lui devra par exemple setter un évènement (AutoResetEvent par exemple).

Le code exécuté par le "background" thread devra tester cet évènement à intervalle régulier. C'est beaucoup plus propre que abort.

Attention, le thread créé ne devra pas accéder directement à l'interface, comme expliqué ici.

Plus de doc là.
0
Rejoignez-nous