SWT中的线程问题
时间:2011-05-07 来源:derline
在swt中程序启动时只有一个主线程,在这里与awt和swing是不一样的,它不允许其他线程访问UI主线程中的部件,具读过swt源码的人说AsyncExec方法根本就没有新启动一个线程而是由Synchronizer调用其中的 run 方法而已.如果是这样的话,也就难怪UI会挂起.
解决这个问题的一个比较好的方法是如果要异步执行的线程所做的工作非常少的话,就无所谓了,如果异步线程需要执行很长时间的话,应该像下面这样启动线程
Thread thread = new Thread(线程对象);
thread.start();
在线程对象里面所有调用到UI部件的地方
classFinder.getGui().getDisplay().syncExec(new Runnable() {
public void run() {
//do run
}
});
历经几个小时问题终于解决了这里做个总结吧.
我对swt多线程的评价
swt的syncExec ,asyncExec 以及timerExec都是伪线程执行方法,把它看成特别的Synchronizer调用就可以了,
syncExec ,asyncExec 以及timerExec执行的线程要做的事只是改变UI部件的属性而已执行时间不能太长.此外的其他操作仍然由传统的线程来做.
在这里要感谢内部类,否则一个复杂的swt线程不知道要写多少个为swt部件服务的标准类
相关阅读 更多 +