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

Signaler
Messages postés
7
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
24 novembre 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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()...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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++
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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++
Messages postés
7
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
24 novembre 2009

Merci pour vos réponses,
mais au final ça répond pas à mon problème
Quelqu'un a t'il une idée?
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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à.