Frage

Ich habe eine Form zeigt Statusmeldungen wie ein ziemlich langer Prozess ausgeführt wird. Es ist ein Aufruf an einen Web-Service, so kann ich nicht wirklich sinnvoll einen Prozentsatz vollständige Abbildung auf einem Fortschrittsbalken zeigen. (Ich nicht besonders, wie die Marquee-Eigenschaft der Statusleiste)

Ich möchte ein animiertes GIF zeigen, den Prozess um das Gefühl von etwas Tätigkeit zu geben (zum Beispiel Dateien von einem Computer zum anderen wie Windows Kopiervorgang fliegen).

Wie Sie das tun?

War es hilfreich?

Lösung

Es ist nicht zu hart.

  1. Drop eine picturebox auf das Formular.
  2. Fügen Sie die GIF-Datei als Bild im picturebox
  3. Zeigen Sie die picturebox, wenn Sie geladen werden.

Dinge zu berücksichtigen:

  • Deaktivieren der picturebox die gif verhindern animiert werden.

Animierte GIFs:

Wenn Sie animierte Gifs suchen Sie können sie erzeugen hier

Eine andere Möglichkeit, es zu tun:

Eine andere Möglichkeit, die ich gefunden habe, die sehr gut funktioniert, ist die Asynchron-Dialogsteuerung, die ich auf der

Andere Tipps

Ich hatte das gleiche Problem. Ganz Form (einschließlich gif) zu stoppen, um sich wegen des im Hintergrund langen Betriebes neu zu zeichnen arbeiten. Hier ist, wie ich dieses Problem gelöst.

  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(); 
  }

Ich habe einfach einen anderen Thread für diesen Vorgang verantwortlich zu sein. Dank dieser ursprünglichen Form weiter ohne Probleme (einschließlich meiner gif Arbeits) neu erstellt. ShowProgressGifDelegate und HideProgressGifDelegate sind Delegierten in Form, die Visible-Eigenschaft von PictureBox mit gif auf true / false gesetzt.

Beachten Sie, dass in Windows, Sie traditionell nicht verwenden animierte Gifs, aber wenig AVI-Animationen: Es gibt eine native Windows-Kontrolle nur um sie anzuzeigen. Es gibt sogar Programme animierte Gifs zu AVI (und umgekehrt) zu konvertieren.

Wenn Sie es in einem PictureBox-Steuerelement setzen, sollte es einfach funktionieren

Es ist nicht, wenn Sie eine lange Operation hinter beginnen, weil alles STOPPT da man im selben Thread'Re.

Ich hatte das gleiche Problem und kam über verschiedene Lösungen durch die Implementierung, die ich verwendet, um mehrere verschiedene Fragen zu stellen. Schließlich unten ist, was ich von verschiedenen Stellen einige Stücke zusammen, die für mich gearbeitet, wie erwartet.

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

Hier ist das Ausführungsverfahren, das auch die Steuerung PictureBox trägt Aufruf:

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

    // Your main code comes here . . .

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

Hintergrund ist die PictureBox unsichtbar von Eigenschaftenfenster oder tun unter:

private void ComparerForm_Load(object sender, EventArgs e)
{
    pictureBox1.Visible = false;
}
scroll top