Zul*_*ake 1 delphi ftp multithreading 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;
Run Code Online (Sandbox Code Playgroud)
我在网上发现了这个,但我不确定我做错了什么:
E2233此处无法访问"手柄"属性
while WaitForSingleObject(TFTPThread.Handle, 0) = WAIT_TIMEOUT do
Application.ProcessMessages;
Run Code Online (Sandbox Code Playgroud)
TIdFTP.Put()是一种阻止方法,它在上传完成之前不会退出.因此,线程本身已经在设计中等待.
您的编译器错误是因为您尝试Handle从TFTPThread类类型本身访问该属性,但它未被声明为class属性,因此您无法执行此操作.您需要Handle通过指向TFTPThread对象的指针来访问该属性:
FTPThread := TFTPThread.Create;
...
while WaitForSingleObject(FTPThread.Handle, 0) = WAIT_TIMEOUT do
Application.ProcessMessages;
Run Code Online (Sandbox Code Playgroud)
另一方面,TThread有自己的WaitFor()方法,你不需要WaitForSingleObject()直接调用(除非你想指定一个非无限超时,这WaitFor()不支持):
FTPThread := TFTPThread.Create;
...
FTPThread.WaitFor;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |