Как вы показываете анимированные GIF-файлы в форме Windows (c#)
У меня есть форма, показывающая сообщения о ходе выполнения как довольно длинный процесс работает. Это вызов веб-службы, поэтому я не могу действительно показать процентную полную цифру на индикаторе прогресса. (Мне не особенно нравится свойство Marquee индикатора выполнения)
Я хотел бы показать анимированный GIF, чтобы дать процессу ощущение некоторой активности (например, файлы, летающие с одного компьютера на другой, как процесс копирования Windows).
Как вы это делаете?
6 ответов:
Это не слишком сложно.
- перетащите элемент управления PictureBox на форму.
- добавить .gif файл как изображение в picturebox
- показать 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 (и наоборот).
Это не так, когда вы начинаете длинную операцию позади, потому что все останавливается, так как вы находитесь в том же потоке.
у меня была та же проблема, и я столкнулся с разными решениями, реализуя которые я сталкивался с несколькими различными проблемами. Наконец, ниже то, что я поставил некоторые части из разных постов вместе, которые работали для меня, как и ожидалось.
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; }