-
Rebonjour !
J'aurais encore une question, à la suite de la discussion sur ce post.
J'aimerais, une fois que le thread que j'ai lancé est terminé, modifier des éléments dans ma fenêtre principale.
J'ai d'abord essayé en le faisant à la fin de ma fonction executeReceip(), mais là il me dit à l'exécution que je n'ai pas le droit de le faire.
Sinon j'ai essayé avec la fonction myThread->Join(), mais là mon thread principal est bloqué et je ne peux plus interagir avec ma fenêtre.
Y aurait-il une solution ? Merci pour vos réponses ^^
-
Hors de .Net, je connaissais la méthode: PostMessage().
Dans .Net, ce mécanisme est caché, donc je ne vois pas trop.
Au pire, tu peux toujours faire un timer qui regarde si le thread est terminé toutes les X secondes... (en appelant Join() avec un timeout nul).
Mais je vois aussi que d'après l'aide, Join() reste un minimum compatible avec une boucle de messages. Mais je ne sais pas exactement à quel point...
-
Quand il faut interagir avec des composants graphiques, il faut toujours le faire dans le thread qui a créé ces composants graphiques. Heureusement, .NET fournit des outils pour nous simplifier la vie.
http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx
-
Je crois que tu viens de trouver le Graal. Merci!
-
Merci pour ces réponses !
J'ai utilisé la méthode du Timer, c'était plus simple à implémenter je trouvais, même si c'est probablement pas la plus élégante ;-)
Ca marche nickel en tout cas, merci !
-
Franchement, plus simple que Invoke() ?? Ca m’étonnerait
Timer ?? Le quel, il y a toute une palanqué de timer différents.
Je te conseil très très vivement de revoir l'utilisation de la méthode Invoke, et de l'adopter.
Et plus élégante donc plus maintenable, beaucoup mais alors beaucoup plus simple que n'importe quel timer.