winform前台显示特定控件 CPU偏高并伴随闪烁

用.net framework 4.6开发了个winform程序。现在遇到一个很操蛋的问题,实在是没有办法了,希望有缘人能帮忙解答。
程序采用Mdiparent容器,从数据库动态加载配置并生成界面Form1,form1里一个treeviewex(自定义封装的treeview),一个flowlayout1
。flowlayout1里面动态加载用户控件。用户控件通过枚举参数显示textbox,combobox,picturebox等基础样式。
问题出在用户控件上,用户控件里存放combobox进行显示时,CPU大增(0增大到30%)并一直持续,且在低配电脑上会导致整个form1闪烁。一旦这个带combobox的控件不显示,CPU立马降到0。
诡异的是,当我把整个程序界面最小化之后,CPU也会降到0,一旦向屏幕呈现就会飙升。
通过性能探查器只提示application.run(Mdiparent1)计数占96%以上,其他消息没有。
现在怀疑是绘制界面的问题,谁能提供些有价值的参考?

经过复杂的排查,终于找到了根源!问题出在对combobox的封装上,封装控件引用继承的基类里面对控件进行重绘,该基类貌似只对textbox有效,其他基础控件会导致formerrorhandle,当出现这个错误时,系统会发送一个界面错误的消息泵,所有的form组件在接收到这个消息后,都会进行重绘,导致了后面的闪烁。本想偷个懒引用开源的控件代码,结果给自己埋了个大坑

开启双缓存试试


 public partial class ComboBoxA : ComboBox
    {

        public ComboBoxA()
        {
            // 开启双缓冲
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

            // Enable the OnNotifyMessage event so we get a chance to filter out 
            // Windows messages before they get to the form's WndProc
            this.SetStyle(ControlStyles.EnableNotifyMessage, true);
            InitializeComponent();

        }
}