Sortir d'un évênement button_click à travers un autre évênement
cs_elise42
Messages postés7Date d'inscriptionlundi 20 juillet 2009StatutMembreDernière intervention24 novembre 2009
-
23 nov. 2009 à 12:28
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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
A voir également:
Sortir d'un évênement button_click à travers un autre évênement
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 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()...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 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...
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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.