Envoyé par
Seth77
Alors pour ça, on est parti pour les explications des déléguées :p
Pour ton cas où tu veux afficher sur la fenêtre l'évolution du traitement de ton thread, c'est à ton thread d'appeler une méthode qui va permettre de laisser la main au thread de ta fenêtre pour afficher quelque chose dessus.
La méthode en question est Invoke.
Cette méthode demande en paramètre un délégué qui lui même demande en paramètre la méthode à exécuter. C'est ce mécanisme qui va permettre au thread de la fenêtre d'avoir le contrôle.
Si tu veux passer des paramètres, Invoke peut recevoir un 2e paramètre qui n'est autre qu'une suite d'object représentants les paramètres à passer à la méthode finale.
Passons à la pratique maintenant...
Tu dois créer un délégué comme ceci :
public delegate myDelegate(int myParam);
Et sa méthode qu'il devra exécuter (comme tu peux le remarquer, elle renvoit la même chose et reçoit les même paramètres) :
1 2 3 4
| public void myMethodToProcess(int myParam)
{
Text = myParam.ToString();
} |
Maintenant, ton thread n'a plus qu'à appeler la méthode myMethodToProcess via Invoke comme ceci :
1 2 3 4 5
| if (NewDirectory == true)
{
Count++;
this.Invoke(new myDelegate(myMethodToProcess)), Count);
} |
Si tu voulais faire directement dans ton thread Text = "Test";, tu aurais une exception te disant qu'il y a cross-threading ou quelque chose dans le genre... C'est pourquoi on a recourt à ce mécanisme.
Partager