长任务的屏幕响应问题(50分)

  • 主题发起人 young0098
  • 开始时间
Y

young0098

Unregistered / Unconfirmed
GUEST, unregistred user!
我启动一个线程,读取大量的数据,在线程中用memo.lines.add到主窗口的Tmemo组件上,结果在主窗口上点击菜单、拖动窗口等操作都没有响应,要等线程读完数据才有反映,难道用线程也不能解决这个问题吗?还是我线程用的不对?
 
应该是线程用得不对
 
如果你使用了线程同步的话,当然会没响应啦!
因为主线程那时已经被阻塞了。
 
贴程序出来看看
 
我也遇到了同样的问题,如果用线程同步的话,主线程肯定会被阻塞,但是如果在子线程中添加的话,VCL又不支持,郁闷!!!!!!!!!!!
 
注意使用Application.ProcessMessage方法,这是简单而实用的。另外,更重要的一点是,用Memo.Lines.Add之类的方式来读取大量数据是不明智的,它的效率很低。你应该采取更为高效的方式。进行大量文本替换和其它处理时,也同样要注意到这种效率问题。多线程要用得其所,否则反而会将简单的问题复杂化。
 
顶部