用THttpGet 下载多个文件的问题, 请各位朋友都进来帮忙看看. ( 积分: 200 )

  • 主题发起人 主题发起人 WRainbug
  • 开始时间 开始时间
W

WRainbug

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如果用THTTPGET连续下载多个文件.
我从TStringList 读出MYURL, MYFILE, 然后用
for i := 0 to N do
begin
HTTPGet1.WaitThread := true;
HTTPGet1.URL := MYURL;
HTTPGet1.FileName := MYFILE;
HTTPGet1.GetFile;
end;
这样可以, 但是线程被占用, 程序其他地方没响应, 只能等着它下载完.

我后来在HTTPGET1的下载完毕事件里添加如下过程:作递归调用.
procedure TDownloadForm.DownNext(filelist : tstringlist; Current: Integer);
var
itemcount : Integer;
begin
if Current>= filelist.count then exit;

showmessage('download next file'); <<<<<<可以正常运行到这里.
HTTPGet1.WaitThread := false;
HTTPGet1.URL := MYURL;
HTTPGet1.FileName := MYFILE;
HTTPGet1.GetFile;

CurrentItemNum := CurrentItemNum + 1;
end;

递归没有成功, 请问各位有什么看法.....

谢谢了, 不知道的朋友, 帮顶一下帖子, 也送分感谢!
 
请问如果用THTTPGET连续下载多个文件.
我从TStringList 读出MYURL, MYFILE, 然后用
for i := 0 to N do
begin
HTTPGet1.WaitThread := true;
HTTPGet1.URL := MYURL;
HTTPGet1.FileName := MYFILE;
HTTPGet1.GetFile;
end;
这样可以, 但是线程被占用, 程序其他地方没响应, 只能等着它下载完.

我后来在HTTPGET1的下载完毕事件里添加如下过程:作递归调用.
procedure TDownloadForm.DownNext(filelist : tstringlist; Current: Integer);
var
itemcount : Integer;
begin
if Current>= filelist.count then exit;

showmessage('download next file'); <<<<<<可以正常运行到这里.
HTTPGet1.WaitThread := false;
HTTPGet1.URL := MYURL;
HTTPGet1.FileName := MYFILE;
HTTPGet1.GetFile;

CurrentItemNum := CurrentItemNum + 1;
end;

递归没有成功, 请问各位有什么看法.....

谢谢了, 不知道的朋友, 帮顶一下帖子, 也送分感谢!
 
送分我喜欢[:D]
 
哈哈,WaitThread := true,那是要等待线程下载结束,GetFile才会返回的,其他地方自然没反应的;而在HTTPGET1的下载完毕事件里添加如下过程:作递归调用.,那自然也是不行的,因为一来HTTPGET的下载线程是结束后自动释放的(FreeOnTerminate = True),二来在OnThreadDone事件中,线程对象还不是nil,而GetFile中有判断线程对象是否nil,只有是nil还没创建线程对象时,才会创建线程对象并进行下载的
要下多少个文件,就动态创建多少个HTTPGET组件吧,再不,就自己动态创建多个THTTPGETThread线程来下载文件吧
 
动态创建httpget会stack 溢出...
 
谁给个一个接着一个下载, 而程序有响应的代码... 500分... [:D]
谢谢了.. 头晕了...
 
多人接受答案了。
 
谢谢了, 不知道的朋友, 帮顶一下帖子, 也送分感谢!

楼主真幽默,又做了回傻瓜,呵呵
 
后退
顶部