我似乎无法弄清楚自己在做什么,我有以下代码将文件上传到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;
最佳答案
TIdFTP.Put()
是一种阻止方法,只有在上传完成后才会退出。因此,根据设计,线程本身已经在等待。
您的编译器错误是因为您尝试从Handle
类类型本身访问TFTPThread
属性,但未将其声明为class
属性,因此您无法这样做。您需要通过指向Handle
对象的指针访问TFTPThread
属性:
FTPThread := TFTPThread.Create;
...
while WaitForSingleObject(FTPThread.Handle, 0) = WAIT_TIMEOUT do
Application.ProcessMessages;
另一方面,
TThread
有其自己的WaitFor()
方法,您无需直接调用WaitForSingleObject()
(除非您要指定WaitFor()
不支持的非无限超时):FTPThread := TFTPThread.Create;
...
FTPThread.WaitFor;
关于multithreading - 使用新线程进行FTP上传并等待上传完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431214/