CreateThread中怎么把数据写入VCL中,好像有时候报错

解决方案 »

  1.   

    本帖最后由 bdmh 于 2012-07-07 17:43:45 编辑
      

  2.   

    procedure TMyThread.Execute;
    begin
      inherited;
      ...
      Synchronize(MyUpdate);
      ...
    end;procedure TMyThread.MyUpdate;
    begin
      Form1.StringGrid1.Cells[1, 2] := 100
    end;
      

  3.   

    function TestThr(s:string): Integer; stdcall;
    begin
      Form1.StringGrid1.Cells[1,1]:=s;
      Result:=0;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      H:DWord;
      s:Pchar;
    begin
      s:='Hello World';
      Createthread(nil, 0, @TestThr, s, 0, H);
    end;
      

  4.   

    还是可以用Synchronize同步的!
    procedure TForm1.MyUpdate;
    begin
      SHowMessage('abc');
    end;function ThreadFunc(P: Pointer): DWORD; stdcall;
    var
      M: TMethod;
    begin
      M.Data := Form1;
      M.Code := @TForm1.MyUpdate;
      TThread.Synchronize(nil, TThreadMethod(M));
      Result := 0
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      C: Cardinal;
    begin
      CreateThread(0, 0, @ThreadFunc, nil, 0, C)
    end;