THREADER SIMPLEMENT UNE CLASSE POUR INTERAGIR AVEC UNE FORM

TheManu Messages postés 8 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 11 mai 2010 - 6 déc. 2007 à 17:16
cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009 - 6 déc. 2007 à 17:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42292-threader-simplement-une-classe-pour-interagir-avec-une-form

cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
6 déc. 2007 à 17:21
C'était juste un exemple d'implémentation et d'utilisation de Control.Invoke()
TheManu Messages postés 8 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 11 mai 2010
6 déc. 2007 à 17:18
Pardon, l'avant dernière ligne doit être : refThreadProgress.OnProgress(i);
TheManu Messages postés 8 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 11 mai 2010
6 déc. 2007 à 17:16
Tu peux encore 'simplifier' ta classe ThreadProgress ,en tout cas la rendre plus générale. Elle doit être 'intermédiaire' entre le traitement -ici téléchargement par exemple- et l'écouteur -ici la form et l'affichage de progression. Donc tu peux :
- 1 : Brancher des méthodes ('en écoute') à ton 'OnProgressHandler' (qu'on pourrait appeler evenOnProgress) qui se chargeront de l'affichage (et autres). 2 : Le traitement peut être extérieur à ta classe (avec bien sûr une 'réf' sur la méthode d'appel 'On...()', public et lançant l'évènement).
D'où 'séparation' de l'affichage avec le traitement (ActionThreadMessForm).
- Le 'invoke' peut alors être placé dans ta méthode 'évènement' cad OnProgress.
-cad : Classe traitement --appel--> classe intermédiaire, évènement 'On...' --propage (avant de rendre la main) l'appel--> sur le thread de la form avec la ou les méthode(s) (ou rien.. si _formStartThread à null) en écoute.
- Modif :
public event OnProgressHandler evenOnProgress;//au lieu de OnProgress. public pour ajout 'écouteur(s)'
public void OnProgress(int i){
if (_formStartThread != null && _formStartThread.InvokeRequired)
_formStartThread.Invoke(evenOnProgress, new object[] {i});
else
evenOnProgress(i);}

///////Et dans la classe de traitement :
private ThreadProgress refThreadProgress;
public void Start(){
//traitement....
refThreadProgress.Progress(i);
//suite du traitement...
Rejoignez-nous