Notifier le Thread principal de la fin d'un calcul asynchrone
tservolle
Messages postés28Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention22 janvier 2007
-
9 oct. 2006 à 17:15
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 2010
-
11 oct. 2006 à 12:58
Bonjour,
Voila j'ai un petit probleme dont je n'arrive pas a me sortir,
Je suis en NET 1.1
Je cherche a lancer un calcul asynchrne dans un thread séparé de mon GUI, afin de ne pas le surcharger, et je voudrais avertir mon Thread principal a la fin de mon traitement pour que mon GUI soit mis a jour en allant lire le resultat de mon calcul asynchrone.
J'ai essayé,
1/ en creant un Thread, pour faire mon traitement, et en generant un evenement a la fin de mon calcul. Malheureusement, dans ce cas, la methode associé a mon evnement est effectué dans le thread appelé et pas dans le thread appelant , car c'est le thred appelé qui genere l'evenement.
2/ en utilisant un delegate avec un beginInvoke, puis le EndInvoke dans le CallBack, mais le CallBack est lui aussi executé dans le Thread appelé et non pas dans le Thread appelant.
J'ai vu qu'il existe en NET2.0 un objet BackgroundWorker qui a priori fait exactement ce que je cherche a faire.
Quelqu'un saurait il faire en NET 1.1. ??
Merci d'avance.
PS : Du coup je ne comprends pas comment faire pour avertir le Thread principal de la fin d'un thread qu'il aurait créer, a part en checkant regulierement que le thread appelé existe toujours.
la aussi si quelqu'un a une idee ...
tservolle
A voir également:
Notifier le Thread principal de la fin d'un calcul asynchrone
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 9 oct. 2006 à 17:39
Salut
Tout simplement, tu peux depuis ton second thread appeler via la méthode Invoke une méthode de ton Thread principal (celui de ton GUI), en lui passant le resultat de ton calcul.
Ton thread principal saurait alors que ton thread secondaire a fini son traitement.
tservolle
Messages postés28Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention22 janvier 2007 10 oct. 2006 à 16:03
Salut ,
Si je comprends bien cela signifie qu'il faut appeler la methode Invoke de l'objet Control, mais dans ce cas cela signifie que le calcul qui est lancé dans le thread secondaie doit posseder une reference sur le GUI, on ne peut donc pas decorreler la partie calcul de la partie GUI (comme l'impose le design pattern ModeleVueControleur).
Ou bien s'agit il de la methode Invoke d'un autre objet comme par exemple la methode Invoke de delegate.Method ?????
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 11 oct. 2006 à 12:54
ton thread peut tres bien prendre en parametre cet objet graphique....
sinon, tu peux utiliser un AsyncCallback je pense...
derniere solution, créer un event windows (pas un event .NET, un event du type des WM_blabla). jopterais plutot pour un AsyncCallback (mais je ne sais pas vraiment ce que ca peux donner, cest juste une idée comme ca).
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 11 oct. 2006 à 12:58
pâr contre, ton controlleur est créé dans le thread principal, donc rien nempeche a ton controlleur dinstancier un controle dans son constructeur (si lobjet est construit dans le thread pincipal), et dutiliser ce control pour faire ton invoke (ok cest moche, mais jai du faire comme ca aussi pour un probleme un peu similaire).