C#在Form中动态显示gif

C#在Form中填充一个panelMain,现有2个用户控件ucLoad(label的image为gif),ucInfo(数据加载得一段时间),希望点击一个按钮后,pan... C#在Form中填充一个panelMain,现有2个用户控件 ucLoad(label的image为gif),ucInfo(数据加载得一段时间),希望 点击一个按钮后,panelMain添加ucLoad 显示一个动态的加载画面,待ucInfo加载完了显示的是 ucInfo. 我用单线程做的话 ucLoad无法显示,画面显示panelMain的backgroundimage一会后直接显示的ucInfo,没有过程。 多线程做的话2个控件切换过程完全不是预期的想要的效果,请问怎么解决?? 展开
 我来答
dghl9500
推荐于2017-11-25 · 超过25用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:55万
展开全部
在DotNET中有一个ImageAnimator类,动画处理包含基于时间的帧的图像,这样的在C#中就不需要加载一组图片了,一个Gif轻松搞定,程序也干净很多。

ImageAnimator类
这个类非常简单,主要有几个方法
1)Animator,启动一个多帧的图片,开始动画显示。这里需要制定一个回调函数onFrameChangedHandler,当图片内部间隔时间达到时触发,通常在这个回调函数中刷新界面,显示下一帧图片。特别强调一点,可能ImageAnimator内部用线呈池的定时器检查时间间隔,所以该回调函数触发时,不在程序的主线程中,要注意同步的问题。 2)CanAnimator方法,判断图片是否是动画图片。
3)StopAnimator方法,比较简单,就是停止正在运行的动画。
4)UpdateFrame方法,使该帧在当前正被动画处理的所有图像中前移。新帧在下一次呈现图像时绘制。如(1)所述onFrameChangedHandler不是在主线程中被触发,所以利用这个事件调用UpdateFrame时一定要考虑同步,如果在绘制图片的同时调用UpdateFrame,或者在调用UpdateFrame时绘制图片都会产生资源冲突的异常。所以建议UpdateFrame和绘制图片的动作都在主线程中去执行。

最后还有一点注意事项:动画图片的绘制可能会比较频繁,由此造成闪烁,解决办法有两个:
1)不要调用this.Invalid()重绘整个窗口,而应该调用this.Invalid(rect)仅绘制显示图形的区域。
2)指定一下窗口风格,启动窗口的双缓存

源码:
http://blog.sina.com.cn/s/blog_6e110f480101dul7.html

参考资料: http://tech.it168.com/oldarticle/2006-08-30/200608301601224.shtml

传奇勇者
2013-03-19 · TA获得超过747个赞
知道大有可为答主
回答量:1706
采纳率:75%
帮助的人:809万
展开全部
你把两个控件加载的过程写进一个函数,然后用线程加载这个函数就行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式