在WinForm中控制GIF动画的启停的一种方法

    在WinForm中许多控件(本文以最常用的PictureBox为例)都有Image属性,如果该Image是一个动画Gif的话,它会自动运行动画。在某些场合,我们希望控制该动画的启停,此时我们首先想到了ImageAnimator,但实际使用时,我们发现以下指令根本不起作用,Gif停不下来,具体原因不明:
None.gif         ImageAnimator.StopAnimate(box.Image,  new  EventHandler(OnImageAnimate));
None.gif        
private   void  OnImageAnimate(Object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
this.Invalidate();
ExpandedBlockEnd.gif        }

None.gif
    此时,我想到控件的Enable属性,在其为false时,Gif是不会启动的,一旦设其为true,则动画立刻自动运行,因此只要该属性不作它用,则完全可以用来控制动画的启停。
    需要注意的是线程的安全性,以下代码示例实现了某一控件点击后启动Gif运行5秒钟,然后停下来:
None.gif          delegate   void  SetGifEnableCallback(Control control,  bool  enable);
None.gif
None.gif        
void  picboxSearching_Click( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            Thread t 
= new Thread(new ThreadStart(Animate));
InBlock.gif            t.Start();
ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   void  SetGifEnable(Control control,  bool  enable)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
if (control.InvokeRequired)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                SetGifEnableCallback callback 
= new SetGifEnableCallback(SetGifEnable);
ExpandedSubBlockStart.gifContractedSubBlock.gif                
this.Invoke(callback, new object[] dot.gif{ control, enable });
ExpandedSubBlockEnd.gif            }

InBlock.gif            
else control.Enabled = enable;
ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   void  Animate()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            PictureBox box 
= this.pictureBox1;
InBlock.gif            AutoResetEvent waitHandler 
= new AutoResetEvent(false);
InBlock.gif            SetGifEnable(box, 
true);
InBlock.gif            waitHandler.WaitOne(
5000true);
InBlock.gif            SetGifEnable(box, 
false);
ExpandedBlockEnd.gif        }

None.gif

转载于:https://www.cnblogs.com/dotAge/archive/2007/06/30/801536.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值