您所描述的似乎不太可能以稳健的方式工作。这是一个简短的摘要:
根据我的经验,计时器通常并不准确。由于计时器消息通过 Windows 消息泵,它们的移动速度只能与 Windows UI 处理消息的速度一样快。任何干扰消息的应用程序都会导致您的计时器结结巴巴,尽管仔细工作可以防止大部分情况发生。这里有一些关于计时器的经典讨论:Winforms Timer for Dummies
一般来说,List 是一种非常低效的图像存储方式。对于每秒 60 帧的一秒动画,您必须在内存中保存 60 张图像并单独解压缩每张图像。
以下是一些可能的解决方案,以及它们带来的权衡:
全动态视频
如果您希望在表单上呈现全动态视频,您应该真正考虑使用MediaElement
(对于 WPF 应用程序:http ://www.c-sharpcorner.com/uploadfile/dpatra/media-element-in-wpf/ )或MediaPlayer
对象(对于 WinForms 应用程序:http: //msdn.microsoft.com/en-us/library/bb383953 (v=vs.90).aspx )。
这将允许您播放包含极高质量图像、不同压缩的长视频,并可以任意开始或停止播放。但是,完整视频播放器的启动和内存使用要求不仅仅是在屏幕上显示单个图像。您会发现您的应用程序需要一些时间来初始化视频子系统,这可能很烦人。
动画图像
可以在 Windows 窗体或 WPF 中的图片框中显示动画图像。您只需生成动画图像 - 通常使用 GIF 动画文件。这对于大多数简单动画都可以顺利运行,并且可以从以下网站获得免费使用的动画 GIF:http: //www.chimply.com/Generator
以下是如何在表单上放置动画 GIF 的演练:http: //trompelecode.com/2010/12/animated-progress-indicator-in-csharp-windows-forms/
精灵动画
假设您需要准确地表示每个图像(如果您只是想看起来很吸引人,这不是必需的),并且您不想要视频系统的开销(如果您只是在玩,这没关系一两秒钟的动画)。然后你想要做的是创建一个单一的复合“精灵”图像。这减少了应用程序的内存开销需求并减少了解压缩文件的时间。
例如,这是一个为您生成 PNG 精灵的网站:http ://wearekiss.com/spritepad
生成带有精灵的图像后,您可以将其放置在图片框中,并通过更改图片在图片框中的相对位置来为图像设置动画。以下是如何完成此操作的演练:C#picturebox load image with a offset
概括
无论您选择以何种方式显示动画图像,都会有一些取舍。我喜欢为自己选择最简单的解决方案——就我而言,我喜欢使用动画 GIF 图像。祝动画好运!