Bonjour !

Voila, j'ai une petite appli qui effectue un traitement assez 'long' à un moment donné, et je veux ajouter sur ma Form principale, un bouton annulé.
Sauf que, pendant le traitement, la form ne peut pas être utilisée (le thread ayant créé la form traite mon travail en cours).

Donc, je me suis mis dans l'idée de créer un thread qui exécuterait mon traitement qui est long, comme ca, ma Form reste utilisable.

Jusque la je pense être sur la bonne voie non ?

Je me suis retrouvé confronté à une erreur imprévue, celle où mon thread exécutant le traitement, doit modifier la Form, pour faire avancer une ProgressBar.

En fouillant sur le Net, j'ai trouvé des choses parlant de Delegate.
Mais, j'ai du mal à m'en servir, aussi pouvez vous m'aider?

Voici du code illustrant mes questions :

Déclaration de ma méthode délégué :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
private delegate void SetProgressBar(int iMaxValue, int iValue,int iStepValue,int iMinValue);
 
private void SetProgressBarValue(int iMaxValue, int iValue, 
int iStepValue, int iMinValue)
{
            myProgressBar.Maximum = iMaxValue;
            myProgressBar.Value = iValue;
            myProgressBar.Step = iStepValue;
            myProgressBar.Minimum = iMinValue;
}
Lors d'un click sur un bouton, je créé mon Thread qui exécute le traitement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
private void Button_Reprodesk_Click(object sender, EventArgs e)
{
            //PrepareListForReprodesk();
            Thread myThread = new Thread(new ThreadStart(PrepareListForReprodesk));
            myThread.Start();
}
Et donc, c'est ma méhode : PrepareListForReprodesk, qui à un moment doit modifier ma Form, donc dans la méthode PrepareListForReprodesk, je dois normalemnt appeler ma méthode Délégué non ?

J'ai beau essayer différents appels, ca ne marche pas, j'ai un léger problème de syntaxe.

J'ai essayé dernièrement ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Invoke(new SetProgressBar(SetProgressBarValue(tabLineFromFile.Length * 2, 0, 1, 0)));
Mais j'ai une erreur :
Nom de méthode attendue.

Je suis un peu paumé la..

Merci