Question

J'ai un formulaire affichant les messages de progression lorsqu'un processus assez long s'exécute. Il s’agit d’un appel à un service Web et je ne peux donc pas afficher de manière significative un pourcentage complet sur une barre de progression. (Je n'aime pas particulièrement la propriété Marquee de la barre de progression)

Je souhaite afficher un fichier GIF animé afin de donner au processus l'aspect d'une activité (par exemple, des fichiers transférés d'un ordinateur à un autre, comme le processus de copie Windows).

Comment faites-vous cela?

Était-ce utile?

La solution

Ce n'est pas trop difficile.

  1. Déposez une zone de saisie sur votre formulaire.
  2. Ajouter le fichier .gif en tant qu'image dans la boîte à images
  3. Afficher la boîte à images lors du chargement.

Points à prendre en compte:

  • La désactivation de la boîte à images empêchera l'animation du gif.

Gifs animés:

Si vous recherchez des gifs animés, vous pouvez les générer ici

.

Une autre façon de procéder:

Le contrôle asynchrone que j'ai trouvé sur projet de code

Autres conseils

J'ai eu le même problème. La forme entière (y compris gif) s'arrête pour se redessiner à cause d'une longue opération de travail en arrière-plan. Voici comment j'ai résolu ce problème.

  private void MyThreadRoutine()
  {
   this.Invoke(this.ShowProgressGifDelegate);
   //your long running process
   System.Threading.Thread.Sleep(5000);
   this.Invoke(this.HideProgressGifDelegate);
  }

  private void button1_Click(object sender, EventArgs e)
  {
   ThreadStart myThreadStart = new ThreadStart(MyThreadRoutine);
   Thread myThread = new Thread(myThreadStart);
   myThread.Start(); 
  }

J'ai simplement créé un autre thread pour être responsable de cette opération. Merci à cette forme initiale continue à redessiner sans problèmes (y compris mon gif de travail). ShowProgressGifDelegate et HideProgressGifDelegate sont des délégués sous forme qui définissent la propriété visible de pictureBox avec gif à true / false.

Notez que sous Windows, vous n'utilisez généralement pas de gifs animés, mais de petites animations AVI: il existe un contrôle natif Windows juste pour les afficher. Il existe même des outils pour convertir les gifs animés en AVI (et vice-versa).

Si vous le placez dans un contrôle PictureBox, cela devrait fonctionner

Ce n'est pas le cas lorsque vous démarrez une longue opération, car tout s'arrête depuis que vous êtes dans le même fil.

J'avais le même problème et je suis tombé sur différentes solutions en implémentant qui me permettait de faire face à plusieurs problèmes différents. Enfin, vous trouverez ci-dessous quelques éléments de différents articles qui ont fonctionné comme prévu.

private void btnCompare_Click(object sender, EventArgs e)
{
    ThreadStart threadStart = new ThreadStart(Execution);
    Thread thread = new Thread(threadStart);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

Voici la méthode d'exécution qui appelle également l'appel du contrôle PictureBox:

private void Execution()
{
    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = true; });
    Application.DoEvents();

    // Your main code comes here . . .

    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = false; });
}

N'oubliez pas que la PictureBox est invisible à partir de la fenêtre de propriétés ou procédez comme suit:

private void ComparerForm_Load(object sender, EventArgs e)
{
    pictureBox1.Visible = false;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top