1。在窗体的Backgroundimage上,设置一个背景图
2。在一个窗体上放了10个label,把Label变成透明色以显示背景图片的效果,
3。如果窗体大小调整,或被其他窗体挡住,再次显示时,
   那么速度非常慢(主要是指label的显示速度),如果不是透明的,速度非常快,
4。我知道他是Update他那块的背景造成的,有办法提速吗?

解决方案 »

  1.   

    换个机子试试吧,这方面我还真没试过,不过10个label也不至于到刷新慢的程序吧,你再查查程序吧。
      

  2.   

    我机器不慢,而且问题肯定会出现的,出现的条件:
    1。界面背景加一个大图片,我加载的图片大小15k左右,gif格式
    2。label设置为透明色,并有多个
    这时当将覆盖在这个界面上的其他界面移动开时,可以很到label依次显示的顺序
      

  3.   

    .Net牵扯到些底层GDI+的东西都不太好弄
      

  4.   

    有一个办法楼主可以试试,就是不要把图加到Backgroundimage属性,而是打开双绶冲属性,重写基类的OnPaint及OnPaintBackground两个方法,在这两个方法中对你的"背景图"定制绘制,这样的话可能会提高效率,因为默认的对背景的绘制"不太合理".
      

  5.   

    GDI+ 构图 本来就很慢
    楼主可以考虑使用gdi 或者 api直接来替换你的操作。
      

  6.   

    to:hbxtlhx(平民百姓)
      多谢,我今天试试这个方法,如果可行,明天结贴。
      但感觉和标签的透明属性设置关系也很大,基于以下两点
      1。如果标签不设置为透明,标签显示很快
      2。背景在拖动等重绘时,显示不是很慢,只是标签所在的地方显示慢
      

  7.   

    to:hertcloud(·£DOTNET@C/C++£·做个热心人)
       你说的是否是在c#内,调用window api函数,完成背景图的加载,和标签的透明处理?
      

  8.   

    不但标签设置透明的时候有慢的感觉,对一个Form来说设置成透明的时候也会有"不爽的"感觉,比如在一个Form设置为透明后调用Show()来显示就会有一闪的感觉.
      

  9.   

    to zhangci226(三只熊熊):
       在设置form的背景图,和label的透明属性时,如何用线程?
      

  10.   

    你应该把Label直接画到背景图片上去,这样会快很多……
      

  11.   

    不要这样设计,改用Graphics 直接绘制背景和Label的内容
      

  12.   

    因为label还要接收单击事件,直接绘制就不好控制了单击时间了,
      

  13.   

    可能我的回答没有价值--------------------------
    但是在WPF中100个控件的加载已不会出现闪烁 或者速度慢的问题了
      

  14.   

    就是把加载label的那段代码写在线程里去执行
      

  15.   

    控件多后,每个控件在界面刷新的时候都需要进行多次的重绘操作,这样就很容易引起闪烁,这个不是加载控件的问题,而是多次重绘的问题,用线程加载也是没有用的.图形涉及太多的话,最好采用Ivony()和GXY2005(晓晨美眉好^_^) 说的,直接绘制,不在采用label控件,把所有需要显示的图形元素在内存中构造完成后一次性的draw到界面,不过这个操作就相对麻烦很多.