【发布时间】:2009-11-20 12:52:56
【问题描述】:
我有一个 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 中重新绘制。