我有一个Windows窗体,通过幻灯片显示在窗体上显示图像。我这样做的方式是让Panel控件具有它驻留的窗体的大小,并添加一个事件处理函数,用于绘制内存中存在的Image对象。绘制事件处理程序在几次迭代后停止执行
void panel_Paint(object sender, PaintEventArgs e)
{
if (_bShowImage)
{
Point leftCorner = new Point((this.Bounds.Width/2) - (_image.Width/2), (this.Bounds.Height/2) - (_image.Height/2));
e.Graphics.DrawImage(_image, leftCorner);
_bShowImage = false;
}
}
当一个新的图像加载和_image引用,我迫使面板重绘:
_bShowImage = true;
_panel.Refresh();
紧接着,图像设置,并从全局变量的间接引用:
_image.Dispose();
_image = null;
我已经看到它有一段时间,说5次迭代,然后panel_Paint()处理程序不被调用。我使用2-3个JPG来显示,我知道它们没有损坏,因为它们在前x次显示效果很好。我已经将面板的Refresh()方法的调试线放在了执行正常的面板上。就好像对处理程序的调用已被删除。有没有人遇到过这个问题?
有没有原因你不使用PictureBox?每次需要重新绘制一点点时,这种方式绘制整个图像会有很多开销......如果您要自己做,我建议至少注意应该重绘的区域从PaintEventArgs获取。 – 2009-11-20 12:59:38