请大家试下:建个新的C#程序,然后拖入100个Label控件,然后运行,会发现窗体出来后,Label控件会从一边刷着显示出来,估计有差不多1秒的时间,没有显示的地方可以看到事透明的。VC.NET建立托管程序也是如此。不仅仅是显示的时候,最小化后,然后再还原,和打开的效果一个样子,刷屏。与集成显卡无关,再独立显卡依然一样。然而使用DELPHI或VC建立的MFC程序就不会出现这种情况。这个问题事托管带来的弊病吗?那么在托管程序中可以解决这个问题吗?如何解决?请高手来指点下。 以下是位网友的答复:
出现的情况是因为:默认是一边创建一边显示,当控件多了时,性能会下降;这时最好等创建完后一起显示,要额外设置一个属性,以开启这种方式,这样和用DELPHI或VC建立的MFC程序在使用感觉上是一样的.
准确的说,应该是在绘制的同时又在显示,所以最小化然后再还原,windows会重新绘制显示,因为我很少在winform下写程序,一时也提供不出这方面的解决方法。但确实有这种设置,一般在好点的书(教程)里会讲到这个的,特别是使用GDI+创建UI,这种设置是基本动作。 请大家帮我找找解决方法。
出现的情况是因为:默认是一边创建一边显示,当控件多了时,性能会下降;这时最好等创建完后一起显示,要额外设置一个属性,以开启这种方式,这样和用DELPHI或VC建立的MFC程序在使用感觉上是一样的.
准确的说,应该是在绘制的同时又在显示,所以最小化然后再还原,windows会重新绘制显示,因为我很少在winform下写程序,一时也提供不出这方面的解决方法。但确实有这种设置,一般在好点的书(教程)里会讲到这个的,特别是使用GDI+创建UI,这种设置是基本动作。 请大家帮我找找解决方法。
SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true);
在做耗时的操作时,为防止白屏, 先 SuspendLayout(),停止FORM刷新, 操作结束后 ResumeLayout() 恢复。
试了下,不行,可能是我使用的方法错了,但根据MSDN解释应该是可以解决这个问题,请用过的说下,在窗体控件加载时,如何使用这个方法。