关于多线程界面更新的问题,帮我解释一下就行(100分)

  • 主题发起人 主题发起人 Alucard
  • 开始时间 开始时间
A

Alucard

Unregistered / Unconfirmed
GUEST, unregistred user!
我做一个小东西的时候要从一个目录下读取所有Excel文件读取某些数据,然后将其显示在一个StringGrid里,由于文件有点多,所以查询的时候使用了多线程,在更新StringGrid的时候用Synchronize,可以显示,这应该正常吧?但是我不用Synchronize时也能正常显示!我的系统是WindowsXP Sp2, 开发环境Delphi 7.0
 
书上写的是
Synchronize过程是解决VCL的缺陷的,他用Method参数指定一个方法,用这个方法访问VCL,线程本身并不调用这个方法,而是通知主线程调用这个方法。
不过我不知道VCL的缺陷是啥,所以对上面的话也不明白什么意思。
我测试结果是在普通application里面线程是可以直接操作窗体里面的控件的
但是在写ocx的时候即便用了Synchronize,一样不可以在线程里面操作窗体里面的控件,都会说什么不能canvas,哪怕是让timer enable都不行。
 
在操作VCL可见的窗体时,要Synchronize,其它的时候不用.
 
to dedema
我是操作VCL可见控件的时候试过的啊。
操作窗体还没试过。。。不过我想窗体和VCL可视控件应该差不多吧?都是为了防止处理线程和主线程更新界面冲突而必须用Synchronize...
 
自己顶上去!
 
这只不过是因为你没做什么会引起混乱的操作,
如果你在某个地方要写红字,
另个地方写蓝字,
没有用同步的话,
就有可能因为线程切换而导致出现颜色混乱
canvas的问题,
在多线程使用的时候要用lock方法来锁住,
操作完unlock释放
 
to stlont
谢谢指点!
接分吧,一点心意,如有分配不当还望海涵....
 
多人接受答案了。
 
后退
顶部