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

Signaler
Messages postés
28
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
22 janvier 2007
-
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
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

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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# 
Messages postés
28
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
22 janvier 2007

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