Notifier le Thread principal de la fin d'un calcul asynchrone

tservolle Messages postés 28 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 22 janvier 2007 - 9 oct. 2006 à 17:15
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 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

5 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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.

Mx
MVP C# 
0
tservolle Messages postés 28 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 22 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 ?????

tservolle
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
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).
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
11 oct. 2006 à 12:56
mmh je me reprend, jepense que jai dis une connerie avec le asyncallback (apres reflexion...)
0

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

Posez votre question
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
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).
0
Rejoignez-nous