Bonjour

j'ai l'impression que le problème est vu et revu, mais je n'arrive pas à utiliser les blocs de codes que je trouve, ça n'a aucun effet....
j'ai un traitement de plusieurs secondes et j'aimerais avoir une progress-bar qui monte pendant que ce traitement s'effectue.

le dernier truc que j'ai essayé est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Progress(10);
                    System.Threading.Thread.Sleep(2000);
CancellationTokenSource cancellation = new CancellationTokenSource(TimeSpan.FromSeconds(8));
                    ProgressAsync(() => Progress(pMain.MainProgressBar.Value + 1), TimeSpan.FromSeconds(1), cancellation.Token).Wait();
                    if (BindGrid(Business.Lists.PreFacturations.Mode.PreCalcul))//   <-- gros traitement
                    {
//etc...
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static async Task ProgressAsync(Action action, TimeSpan interval, CancellationToken cancellationToken)
        {
            while (true)
            {
                //action();
                Task task = Task.Delay(interval, cancellationToken);
 
                try
                {
                    await task;
                }
 
                catch (TaskCanceledException)
                {
                    return;
                }
 
                catch (Exception)
                {
                    return;
                }
            }
        }
et Progress fait monter la valeur de la progress-bar + ajoute un texte

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
public void Progress(int Progressing_Score)
        {
            pMain = this.ParentForm as Monext.Main;
            pMain.MainProgressBar.Value = Progressing_Score;
            pbPrecentage(pMain.MainProgressBar);//ajoute un texte
        }
la barre affiche bien 10% suite au Progress(10) et au sleep(2000), puis elle se vide à cause de la ligne suivante (ce n'est pas le cas si je l’enlève) et l'appli esst freeze
En faisant pause, je vois que l’exécution reste bloquée dans l'appel de ProgressAsync()
Et en mettant un point d’arrêt depuis le début, le curseur passe là où il faut mais la progress-bar reste vide

Si quelqu'un peut m’éclairer :'(


edit :
j'ai essayé de reprendre ce code : http://drq.developpez.com/dotnet/articles/threads/#L5
et j'ai comme problème lors de la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Erreur	112	'System.Windows.Forms.ToolStripProgressBar' ne contient pas une définition pour 'BeginInvoke' et aucune méthode d'extension 'BeginInvoke' acceptant un premier argument de type 'System.Windows.Forms.ToolStripProgressBar' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)
J'ai l'impression que mon projet utilise une ToolStripProgressBar au lieu d'une ProgressBar, je ne sais pas trop pourquoi...
Y aurait un moyen de faire BeginInvoke/EndInvoke sur ToolStripProgressBar? (j'ai essayé avec MainProgressBar.GetCurrentParent().BeginInvoke mais la barre ne progresse toujours pas)

edit 2 :
même avec une ProgressBar ca ne marche pas, elle reste vide
sinon j'ai essayé ToolStripProgressBar.ProgressBar.BeginInvoke, ca compile mais n'a aucun effet