J'ai un problem avec l'affichage d'une ProgressBar.
Cette progressBar est contenue dans une fenetre:
public class Fen_Attente : System.Windows.Forms.Form
{
public System.Windows.Forms.ProgressBar PBarre;
.
.
.
public void MiseAJour(int progress)
{
PBarre.Value = progress;
this.Refresh();
}
.
.
.
}
Il n'y a pas de problem lorsque je ne touche pas a la fenetre, l'affichage se fait sans problem.
Mais lorsque je touche a la fenetre, elle devient blanche
Sauf lorsque je rajoute le "this.refresh", qui permet de garder le contenu de la fenetre
mais qui ne met pas a joure l'affichage de la progressBar, qui bloque au moment du deplacement.
J'ai donc testé de realiser les refresh avec un thread:
public class ThreadBarre
{
Fen_Attente fen;
int progress;
// Constructeur
public ThreadBarre (Fen_Attente Fen_Atte)
{
fen = Fen_Atte;
}
// Méthode de modification du paramètre
public void SetProgress(int progression)
{
progress = progression;
}
// Methode de boucle du thread
public void ThreadLoop()
{
int a=0;
while (Thread.CurrentThread.IsAlive)
{
Thread.Sleep(100);
a++;
fen.MiseAJour(progress); // appel 10x par seconde
// fen.Refresh(); // meme tester avec la progressBar en public fen.PBarre.refresh()
// et a plusieur endroit du code
}
}
}
puis
Fen_Attente fen = new Fen_Attente();
fen.Show();
ThreadBarre test = new ThreadBarre(fen);
Thread th = new Thread(new ThreadStart(test.ThreadLoop));
th.Start();
for(int i=0;i<11;i++)
{
Thread.Sleep(500);
test.SetProgress(i*10); // progression a afficher (+10 tt les 1/2seconde)
}
th.Abort();
fen.Hide();
Mais ca ne marche pas non plus.
J'ai tester aussi .Update() ou .Invalidate(), de la meme facon que le .refresh() mais ca ne change rien
Connaissez vous autre chose, du style Drawing ou Paint... moi je ne sais plus ou chercher...
Merci d'avance.
Message édité par hep8 le 09-03-2005 à 12:36:13