如何在Windows窗体上显示animationGIF(c#)
我有一个窗体显示进度消息,因为一个相当长的过程运行。 这是一个Web服务的调用,所以我不能真正显示一个百分比完整的数字在进度栏上的意义。 (我不特别喜欢进度条的Marquee属性)
我想展示一个GIFanimation,给过程一些活动的感觉(例如文件从一台计算机飞到另一台,像Windows复制过程)。
你怎么做到这一点?
这并不难。
- 把一个picturebox放到你的表格上。
- 将.gif文件添加为图片框中的图片
- 加载时显示图片框。
需要考虑的事项:
- 禁用picturebox会阻止gifanimation。
GIFanimation:
如果你正在寻找GIFanimation,你可以在这里生成它们
另一种方法:
另一种方法,我发现,相当不错的是我在代码项目上find的asynchronous对话框控件
我有同样的问题。 整个表单(包括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(); }
我简单地创build了另一个线程来负责这个操作。 由于这个最初的forms继续重绘没有问题(包括我的gif工作)。 ShowProgressGifDelegate和HideProgressGifDelegate是将pictureBox的可见属性设置为true / false的forms的委托。
请注意,在Windows中,传统上不使用animationGIF,而是使用很less的AVIanimation:只有Windows本机控件才能显示它们。 甚至有工具可以将GIFanimation转换为AVI(反之亦然)。
如果你把它放在一个PictureBox控件,它应该只是工作
它不是当你开始一个长时间的操作时,因为你在同一个线程中一切都停止了。
我遇到了同样的问题,并通过实施我曾遇到过的几个不同的问题,遇到了不同的解决scheme。 最后,下面是我把不同职位的一些作品放在一起,如预期般为我工作。
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; }