cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDerniè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és8Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention11 mai 2010 6 déc. 2007 à 17:18
Pardon, l'avant dernière ligne doit être : refThreadProgress.OnProgress(i);
TheManu
Messages postés8Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention11 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...
6 déc. 2007 à 17:21
6 déc. 2007 à 17:18
6 déc. 2007 à 17:16
- 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...