FTP使用新线程上传并等待上传完成

时间:2014-10-17 18:27:06

标签: multithreading delphi ftp delphi-xe

我似乎无法弄清楚我做错了什么,我有以下代码将文件上传到ftp,它在一个新线程上,我怎么能告诉它等待上传完成之前程序

procedure TFTPThread.Execute;
begin
  FTPClient.Host:=FTPAddress;
  FTPClient.Username:=FTPUsername;
  FTPClient.Password:=FTPPassword;
  FTPClient.Connect;
  FTPClient.Put(ZipFileName,'Logs.zip');
  FTPClient.Quit;
  FTPClient.Disconnect;
end;

我在网上找到了这个,但我不确定我做错了什么:

E2233属性'句柄'在这里无法访问

  while WaitForSingleObject(TFTPThread.Handle, 0) = WAIT_TIMEOUT do
  Application.ProcessMessages;

1 个答案:

答案 0 :(得分:5)

TIdFTP.Put()是一种阻止方法,在上传完成之前不会退出。所以线程本身已经在设计中等待了。

您的编译器错误是因为您尝试从Handle类类型本身访问TFTPThread属性,但它未声明为class属性,因此您无法执行此操作。您需要通过指向Handle对象的指针来访问TFTPThread属性:

FTPThread := TFTPThread.Create;
...
while WaitForSingleObject(FTPThread.Handle, 0) = WAIT_TIMEOUT do
  Application.ProcessMessages;

另一方面,TThread有自己的WaitFor()方法,您无需直接调用WaitForSingleObject()(除非您要指定非无限超时,{ {1}}不支持):

WaitFor()