delphi 2010多线程使用

 delphi 2010多线程使用 

TRefreshThread = class(TThread)
  protected
    procedure Execute; override;
  public
    pMainForm:TForm_case_materal_list;
  end;



procedure TRefreshThread.Execute;
begin
  inherited;
  try
    CoInitialize(nil); // 一定要加上此行代码 use ActiveX
    FreeOnTerminate := True;
    pMainForm.RefreshData(); // 使用这个是真正的开启子线程
    // Synchronize(Self, pMainForm.RefreshData);   //fuck 这个使用的还是主线程。可以通过GetCurrentThreadId 测试
  finally
    CoUninitialize; // 一定要加上此行代码
  end;

end;


procedure TForm_case_materal_list.startRefreshThread;
var
  refreshThread: TRefreshThread;
begin
  refreshThread := TRefreshThread.Create(True);
  //把窗体句柄传进来
  refreshThread.pMainForm:=Self;
  refreshThread.Start;
end;

 procedure startRefreshThread();




在Delphi  多线程中出现“尚未调用CoInitialize错误”的解决方法

解决方法如下:

function  TMyThread.ExecTimer: Boolean;
begin
  Result := False ;
  FMyThreadExecfinish := False;
  Screen.Cursor := crHourGlass;
  CoInitialize(nil); // 一定要加上此行代码
  try
    TranspondClientBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
    Sleep(1000);
    TranspondPersonBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
    Sleep(1000);
    TranspondDeptBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
  finally
    Result := True;
    FMyThreadExecfinish := True;
    Screen.Cursor := crDefault;
    CoUninitialize;// 一定要加上此行代码
  end;

end;

你可能感兴趣的:(delphi 2010多线程使用)