Как вы показываете анимированные GIF-файлы в форме Windows (c#)


У меня есть форма, показывающая сообщения о ходе выполнения как довольно длинный процесс работает. Это вызов веб-службы, поэтому я не могу действительно показать процентную полную цифру на индикаторе прогресса. (Мне не особенно нравится свойство Marquee индикатора выполнения)

Я хотел бы показать анимированный GIF, чтобы дать процессу ощущение некоторой активности (например, файлы, летающие с одного компьютера на другой, как процесс копирования Windows).

Как вы это делаете?

6 131

6 ответов:

Это не слишком сложно.

  1. перетащите элемент управления PictureBox на форму.
  2. добавить .gif файл как изображение в picturebox
  3. показать picturebox при загрузке.

вещей, чтобы принять во внимание:

  • отключить элемент управления PictureBox будет препятствовать GIF из анимация.

анимированные GIF:

Если вы ищете анимированные гифы вы можете создать их здесь

другой способ сделать это:

еще один способ, который я нашел, что работает довольно хорошо, это асинхронный диалоговый элемент управления, который я нашел на проект Код

У меня была та же проблема. Вся форма (включая gif) перестает перерисовываться из-за длительной работы в фоновом режиме. Вот как я решил эту.

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

Я просто создал другой поток, который будет отвечать за эту операцию. Благодаря этому начальная форма продолжает перерисовку без проблем (в том числе мой gif работает). ShowProgressGifDelegate и HideProgressGifDelegate являются делегатами в форме, которая устанавливает видимое свойство pictureBox с gif в правда / ложь.

обратите внимание, что в Windows, вы традиционно не используете анимированные GIF, но немного анимации AVI: есть собственный элемент управления Windows, чтобы отобразить их. Есть даже инструменты для преобразования анимированных GIF в AVI (и наоборот).

Если вы поместите его в элемент управления PictureBox, он должен просто работать

Это не так, когда вы начинаете длинную операцию позади, потому что все останавливается, так как вы находитесь в том же потоке.

у меня была та же проблема, и я столкнулся с разными решениями, реализуя которые я сталкивался с несколькими различными проблемами. Наконец, ниже то, что я поставил некоторые части из разных постов вместе, которые работали для меня, как и ожидалось.

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

вот метод выполнения, который также выполняет вызов элемента управления 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; });
}

имейте в виду, PictureBox невидим из окна свойств или сделать ниже:

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