子线程要将一个数值赋给主线程的一个变量。用在execute中运行到这里报错;放在synchronize的过程中还是运行到这里报错。究竟应该怎么办?这个变量必须是全局变量吧

解决方案 »

  1.   

    把这个变量当作全局变量就行了,复杂对象用synchronize同步。
      

  2.   

    你把错误贴出来看一下,也许是变量引用不到呢。synchronize里面的函数不要用参数。
      

  3.   

    错误提示:
    raised exception class EAccessViolation with message 'Access violation at address 0063d838 in module ........
      

  4.   

    这是我的代码type
      TProcessTxtThread = class(TThread)
      private
        iCurrentDataGourp: Integer;
        procedure DisplayProgress;
        procedure InitProgress;
        procedure TxtThreadOnTerminate(Sender: TObject);
      protected
        procedure Execute; override;
      end;type
      TAnalyseForm_Pose = class(TForm)
      .....
      public 
        IsTrue: Boolean;
      end;
      .........implemention.........procedure TProcessTxtThread.Execute;
    begin
      TAnalyseForm_Pose.IsTrue := False;
      ......
    end;  
      

  5.   

    TAnalyseForm_Pose.IsTrue := False;要用窗体的实例。如;
    var
      Form1: TAnalyseForm_Pose;用Form1.IsTrue:=False;
      

  6.   

    我是想给窗口类的IsTrue,赋值啊,再建一个实例那赋值的就不是AnalyseForm_Pose里的IsTrue了
      

  7.   

    呵呵,不明白你的IsTrue为什么非要用在Tanalyseform_pose类而不能用在实例。
      

  8.   

    啊? 我是用在Tanalyseform_pose类的实例analyseform_pose中啊。
    每个窗体IDE自动给加一句创建实例的语句啊。
      

  9.   

    呵呵,既然有IDE自动创建了实例analyseform_pose,就应该用analyseform_pose.IsTrue := False才对啊。而不是TAnalyseForm_Pose.IsTrue := False
      

  10.   

    是啊是啊,TAnalyseForm_Pose.IsTrue := False 是不对的。应该给实例的成员变量赋值,呵呵。