如果我加载数据并画在COMPOSITE上的时间比较多,想移到后台去,在前台显示“数据加载中”,用SWT的UI线程,可以做到数据在后台画完后显示到前台么?因为画的时候我直接控制GC自绘,会不会后台的画显示到前台时GC才开始画?谢谢

解决方案 »

  1.   

    双缓冲阿
    先在后台new一个GC画图,画完后再把图画到前台的GC上。
      

  2.   

    GC的图是双缓冲的,但是由于数据量大,我想把画的过程在后台完成,因为同一个界面还有其他控件一起显示,所以想用线程控制,不知道能不能,如何实现,我对SWT的线程还不是很了解。
      

  3.   

    可以的,
    但是要用Display的public void asyncExec(Runnable runnable)去起线程
      

  4.   

    他是直接去找runnable里的run()里的方法么?我可以在新的线程里修改主线程里生成的控件么?
      

  5.   

    是的,而且也只有用这种方式起的线程才能更新GUI元素(还有个syncExec(),是同步的),否则会报
    org.eclipse.swt.SWTException: Invalid thread access
    你这里应该用asyncExec()起异步线程。
      

  6.   

    swt线程用的时候要小心syncExec实际上是伪线程,用的时候先开一个真正的线程
    然后有关gui操作的时候都用syncExec,注意颗粒度,不要太大syncExec有性能问题,因为这个方法根本就是同步的方法.