winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法。
2014-07-09 10:00
465 查看
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }
接着找办法解决500多个控件PAINT缓慢的效能问题,心塞。
分类都不想分了,就这样。
--update 2014/7/14
CreateParams,xp下,cpu会满负荷。
--update 2014/7/15
1. 重载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; } } }
2. 控件们重新布局的时候比较讨厌,如果嵌套层数很多,西夏普必须将每个控件挂起,suspendLayout,一个简便的方法是用API直接给最外层发禁止绘制,和取消禁止绘制,然后手动refresh。手动,当然是码动的意思。
[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(); }
3. 双缓冲对多控件多嵌套基本没啥效果。
还是API好使。
相关文章推荐
- winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法。
- winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法
- WinForm内移动、放大缩小控件出现闪屏问题的解决方法
- Android Studio该如何导入别人的开源库到自己的项目中并使用库中的控件,网上找过方法但是并不能搞定,希望实际问题 实际解决,拯救我这个傻瓜
- C#的WinForm程序应用了XP主题样式之后,ShowDialog方法出现问题的解决
- WPF 中PasswordBox控件的Password属性不能Binding问题解决方法
- WIN7可中SQL SERVER 2008安装时出现不能在控件上调用 Invoke 或 BeginInvoke错误(终极解决方法)
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- 打开页面时出现"Automation 服务器不能创建对象"问题的解决方法
- 解决SQL Server 2008安装时出现不能在控件上调用 Invoke 或 BeginInvoke错误的方法
- 使用和众达仿真器CCS3.3.8环境调试出现tconf.exe不能工作问题解决方法
- GridView中出现“TemplateField 上不支持回调,因为某些控件不能在回调中正确更新。”的解决方法
- BugFree安装后/site/login不能访问出现404问题的解决方法
- 解决SQL Server 2008安装时出现“ 不能在控件上调用 Invoke 或 BeginInvoke ”错误的方法
- 关于IE中出现的内存不能为written问题的解决方法
- 关于使用CreateUserWinzard控件创建用户时出现连接数据库问题的解决方法
- WinForm中有些控件不能添加ToolTip关联的解决方法
- Winform 控件多闪屏问题解决方法
- 第三方分页控件aspnetPager出现问题解决方法
- 解决SQL Server 2008安装时出现不能在控件上调用 Invoke 或 BeginInvoke错误或者需要重启N次后还提示需要重启的方法