[c#] Problem: affichage d'une progressBar

Problem: affichage d'une progressBar [c#] - C#/.NET managed - Programmation

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
Reply

Marsh Posté le 09-03-2005 à 11:01:48   

Reply

Marsh Posté le 09-03-2005 à 11:14:43    

Au lieu d'utiliser un Thread, essaye avec un délégué :)

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed