近阶段新写了几个控件,发现初始化时候很慢,其中一个的初始化时间要5秒钟之多,到了忍无可忍的境地,于是乎,跟踪了一下代码,发现问题出现在重写的OnResize中,初始化时候OnResize方法竟然被调用了5次之多,而我又在OnResize方法中执行了一些读取图像文件并绘图的工作,不慢才怪了....
于是写了一个继承于UserControl的超简单控件,并重写了OnResize方法,里面只有一句话,那就是调用基类的OnResize方法(必须调用基类的OnResize方法,详情见MSDN),下面详述每次OnResize被调用的过程:
- 在控件本身 InitializeComponent() 方法中最后一句语句执行之后被调用;
- 在父控件的 InitializeComponent() 方法中对本控件的 Location 属性赋值后被调用;
- 在父控件的 InitializeComponent() 方法中对本控件的 Size 属性赋值后被调用;
- 在父控件的 InitializeComponent() 方法中最后一句语句执行之后被调用;
- 窗体显示之后被调用
为什么被调用了这么多次?不得而知..
同样在WinForm平台上写了一个继承于UserControl的超简单控件,OnResize方法只用在父控件对其 Size 属性赋值之后才会被调用,仅此一次而已。
有时间再研究下CF下OnResize方法被调用这么多次,是实现方式上故意这么做的,还是一个bug。