Problem: affichage d'une progressBar [c#] - C#/.NET managed - Programmation
Marsh Posté le 09-03-2005 à 11:55:34
J'ai testé les délégué, au cas ou, mais l'affichage ne marche pas mieu, meme si le code est un peu optimisé.
La fonction qu'appel le delegué est toujours la meme que celle qu'executait le thread...
Mais merci pour ton intervention FlorentG, en + je ne conaissait pas les delegues!
Une autre idée? ... svp
Marsh Posté le 09-03-2005 à 11:01:48
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