Delphi中线程是不能直接访问VCL的,必须调用Synchronize方法

解决方案 »

  1.   

    对VCL的访问只能在主线程中,所有与UI相关的代码都在主线程中执行。每个线程都是独立执行的,同步可以让线程的方法在主线程中执行。
      

  2.   

    我觉得是不必要的,别看Delphi online help上说的,你放个 Edit到主 Form上,再用线程试试?你会发现是不要用synchronize的,Delphi5.0是VCL线程安全的。但这样反而不好,仔细观察后会发现,访问主Form上的Edit会让所有其它子线程 blocking,同样情况改成 Label就不会了,但Label是线程不安全的(从TGraphicControl派生类都是如此),在改Label时先 Lock,完成后要UnLock。
      

  3.   

    Delphi online help常常比它版本落后,线程就是个例子。而且online help上常写得比较可怕。
      

  4.   

    在执行到vcl时,同时创建了许多个线程来执行相同的vcl操作,
    而在线程中又要求使用同步执行,
    且同步执行是在主线程中执行,而它创建的所有线程同样也需要同步执行,
    不知这样是否有必要创建多个线程。
    不知这种理解对吗?
      

  5.   

    你看看TThread的SOURCE就知道了,SYNCHRONIZE其实是向主程序发一个消息,将你要同步的东东传过去,由主程序在收到消息后,逐一执行。