如何在Windows窗体(c#)上显示动画GIF

时间:2020-03-06 15:03:43  来源:igfitidea点击:

我有一个显示进度消息的表格,它显示了相当长的过程。这是对Web服务的调用,因此我无法真正在进度条上有意义地显示完成百分比。 (我不太喜欢进度条的Marquee属性)

我想展示一个动画GIF,以使该过程具有某种活动的感觉(例如,文件从一台计算机飞到另一台计算机,例如Windows复制过程)。

你怎么做到这一点?

解决方案

如果将其放在PictureBox控件中,它应该可以正常工作

不太难。

  • 将一个图片框拖放到窗体上。
  • 将.gif文件作为图片添加到图片框中
  • 加载时显示图片框。

要考虑的事项:

  • 禁用图片框将阻止gif动画化。

GIF动画:

如果我们正在寻找GIF动画,可以在此处生成它们

另一种方法是:

我发现效果很好的另一种方法是我在代码项目中找到的异步对话框控件

请注意,在Windows中,传统上我们不使用动画Gif,而是使用很少的AVI动画:有一个Windows本机控件仅用于显示它们。甚至还有将动画Gif转换为AVI的工具(反之亦然)。

当我们在后面进行长时间操作时,它不会出现,因为由于我们位于同一线程中,所以所有操作都会停止。

我有同样的问题。整个表单(包括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是将gif的pictureBox的可见属性设置为true / false的形式的委托。