我似乎无法弄清楚我做错了什么,我有以下代码将文件上传到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;
答案 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()