在winform中如何对控件做二次缓冲(double buffer)
在winform中控件渲染如果很耗时的话,我们可以对控件做二次缓冲(double buffer)。
有两种方法可供选择
第一个方法是设置控件的DoubleBuffered属性,需要注意这一属性是私有的,要设置此属性需要使用反射。
public static void SetDoubleBuffered(System.Windows.Forms.Control c) { //请参考下面的博客 //http://blogs.msdn.com/oldnewthing/archive/2006/01/03/508694.aspx if (System.Windows.Forms.SystemInformation.TerminalServerSession) return; System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty( "DoubleBuffered", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); aProp.SetValue(c, true, null); }
第二个方法是重写Form的CreateParams属性,如下代码片段
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }
这两种方法都是有效的,具体选哪个需要根据实际情况看。
原文
http://outofmemory.cn/code-snippet/1728/winform-how-to-control-do-erci-buffer-double-buffer