J'ai une classe :

public partial class StatusBarWaiting : ToolStripControlHost{........}

J'ajoute ceci dans ma statusbar. Je démarre avec une méthode start. La méthode start lance un thread qui loop en déplacant une progress bar et en affichant du text. J'ai mis les InvokeRequired afin de ne pas avoir le Cross Thread. Cependant, je réussi a voir mon affichage seulement si je quitte la form et que je reviens dedans (mon statusbar est dans une tab, je dois changer et revenir).

J'ai essayé de mettre des .Refresh()... rien n'a faire. Pourquoi est-ce que le control ne se rafraichi pas?

Merci

Voici le code du start():

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
 
public void start()
        {
            if (this.Control.InvokeRequired)
            {
                this.Control.BeginInvoke(new delCrossThreadMethod(start));
                return;
            }
 
            this.pgbProgress.Value = 0;
            this.pgbProgress.Visible = true;
 
            threadProgressBar = new Thread(new ThreadStart(threadMoveProgressBar));
            threadProgressBar.Name = "Progress";
            threadProgressBar.Start();
            this.timeKeeperActionList.start();
Et pour bouger la progressbar:

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
24
25
26
27
28
29
30
31
32
33
34
 
        /// <summary>
        /// Loop that invoke to the good thread the move of the
        /// progress bar
        /// </summary>
        private void threadMoveProgressBar()
        {
            waitingPersistence = true;
 
            while (waitingPersistence)
            {
                Thread.Sleep(200);
                moveProgressBar();
            }
        }
 
        /// <summary>
        /// Move the progress bar of 1 unit
        /// </summary>
        private void moveProgressBar()
        {
            if (this.Control != null)
            {
                if (this.Control.InvokeRequired)
                {
                    this.Control.BeginInvoke(new delCrossThreadMethod(moveProgressBar));
                    return;
                }
                this.pgbProgress.Value = pgbProgress.Value % pgbProgress.Maximum + 1;
 
                this.Control.Refresh();
                this.pgbProgress.Refresh();
            }
        }
Vous-avez une idée?