我写了一个程序,绘制了一个棋盘游戏的具体情况(我认为它被称为“Ludo”)。现在我可以画出所有的场地和棋子等,但如果一个棋子移动了,我必须重画那个棋子。问题是,当我这样做时,屏幕会闪烁很短的时间。这可能是因为我首先清除了所有的字段和棋子,然后重新绘制它们(我会改进它,但问题会以更小的形式出现,我认为)仍然会出现,屏幕在我清除之间闪烁一切,直到我重绘了一切。有没有办法告诉C#在我告诉它之前不要重新绘制,即使我专门调用了像this.Controls.Clear()
之类的东西?在函数的持续时间内强制不绘画
我已经用this.SuspendLayout()
试过了,因为名字暗示它应该这样做,但那不行。
刚试过this.DoubleBuffered = true;它确实减少了闪烁,但它仍然没有消失 – teuneboon 2011-03-28 20:59:35
这里描述了更多更具体的缓冲选项,这对我的图表绘制项目非常有用。点击:http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx – thmshd 2011-03-28 21:03:33
如果.NET双缓冲实现不适合你,你应该尝试实现你自己的缓冲机制,将你的绘图缓存到位图,然后渲染整个位图。您正在经历屏幕撕裂,因为您基本上迫使您的显示设备连续快速刷新屏幕的多个部分。您希望最小化对显示器的绘制请求数量。 – 2011-03-28 21:04:28