WINFORM 多控件闪烁问题
比如一个form中有20个picturebox或自定义图片控件.采用该方式可以解决依次加载闪烁问题.
注, 重载CreateParams能让控件重绘提速。所以然待究。然,Vista以下操作系统会出现CPU满载
protected override CreateParams CreateParams
{
get
{
if( Environment.OSVersion.Version.Major >= 6 )
{
// Vista以上
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
else
{
return base.CreateParams;
}
}
}
另外一个方法是调用win API.经过测试,再第一种方法使用后,部分界面存在延迟显示的问题,经该方法解决.
注,yourCtrl.Handler可通过form的this.Handler获取.
[System.Runtime.InteropServices.DllImport( "user32" )]
private static extern int SendMessage( IntPtr hwnd, int wMsg, int wParam, IntPtr lParam );
private const int WM_SETREDRAW = 0xB;
private void RefreshYourCtrl()
{
SendMessage( yourCtrl.Handle, WM_SETREDRAW, 0, IntPtr.Zero );//禁止重绘
// 重新布局
SendMessage( yourCtrl.Handle, WM_SETREDRAW, 1, IntPtr.Zero );//取消禁止
yourCtrl.Refresh();
}
最后提一个最好的方法:用GDI可以有效解决控件多的闪烁问题。
欢迎C#或Winform技术交流,C#交流群:83868794