如何显示一个Windows窗体(C#)上GIF动画(How do you show animated

2019-09-03 11:25发布

我有一个展示作为一个相当长的过程中运行进度消息的形式。 这是对Web服务的调用,所以我真的不能显示进度条上显示完成百分比数字有意义。 (我并不特别喜欢进度栏的选框属性)

我想显示的动画GIF给过程中的一些活动的感觉(例如,文件从一台计算机飞往另一个像Windows复制过程)。

你怎么做到这一点?

Answer 1:

这不是太难。

  1. 拖放一个PictureBox到您的形式。
  2. .gif文件添加为PictureBox的图像
  3. 显示正在加载PictureBox的。

事情要考虑:

  • 禁用图片框将阻止GIF被动画。

GIF动画:

如果您正在寻找GIF动画可以生成他们在这里

这样做的另一种方式:

这工作得很好,我已经找到另一种方式是异步对话框控件,我就发现代码项目



Answer 2:

我有同样的问题。 整个表单(包括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在形式上代表该组图片框的Visible属性与GIF至真/假。



Answer 3:

请注意,在Windows中,传统上不使用GIF动画,但很少AVI动画:有一个Windows本地控制只是为了显示他们。 甚至有工具,GIF动画转换为AVI(反之亦然)。



Answer 4:

如果你把它放在一个PictureBox控件,它应该只是工作



Answer 5:

这不,当你开始落后长时间操作,因为一切都停止,因为你在同一个线程是请。



Answer 6:

我有同样的问题,并通过实施这在我以前面对几个不同的问题在不同的解决方案来。 最后,下面是我把一些作品从不同岗位一起期待它为我工作。

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


文章来源: How do you show animated GIFs on a Windows Form (c#)