【发布时间】:2013-01-21 07:54:22
【问题描述】:
我有四个 PictureBoxes(每个 PictureBox 代表一个骰子)和一个 Timer,每 100 毫秒更改一次源图片(在内存中加载为 List<Bitmap> imagesLoadedFromIncludedResources)。
代码:
private List<PictureBox> dices = new List<PictureBox>();
private void timer_diceImageChanger_Tick(object sender, EventArgs e)
{
foreach (PictureBox onePictureBox in dices)
{
oneDice.WaitOnLoad = false;
onePictureBox.Image = //... ;
oneDice.Refresh();
}
}
我需要一次更改所有图像 - 此时,您可以看到图像从左到右更改,并有一点延迟。
我为每个PictureBox 尝试了一个Thread 的变体(使用this answer 中的Control.Invoke 方法) - 它在视觉上稍微好一点,但并不完美。
【问题讨论】:
-
您是否预先缓存了要切换的
Bitmap对象?如果您每次都从磁盘加载,则会有轻微的延迟.. -
是的,我将
Form1_Load(...)Bitmap和this method 预缓存到List<Bitmap>中 -
您的源图像有多大?我无法想象像您在屏幕截图中显示的那样小的东西会出现明显的延迟(假设源图像实际上很小)。
-
试试
foreach (PictureBox onePictureBox in dices.AsParallel() -
实际上,图片稍大一些:“value 1” = 2,6KB,“value 6” = 9KB,所有图片的总大小约为 38KB。
标签: c# .net winforms picturebox