用idftp多线程下载是主界面出现假死现象 请高手指点(100分)

  • 主题发起人 主题发起人 hongzenghuang
  • 开始时间 开始时间
H

hongzenghuang

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure DLthread.downloadfile;
var
tstream:TFileStream;
name:string;
begin
idftp.Username:=form1.getuser(turl);
idftp.Password:=form1.getpsw(turl);
idftp.Host :=form1.geturlhost(turl);
idftp.Port :=21;
idftp.Connect(true);
name:=form1.geturlfilename(turl);
if FileExists(tfilename) then
tStream:=TFileStream.create(tfilename,fmOpenWrite) else
tStream:=TFileStream.create(tfilename,fmcreate);
idftp.SendCmd('rest '+inttostr(tstart),-1);
tstream.Seek(tstart,sofrombegin
ning);
idftp.OnWorkbegin
:=IDFTPWorkbegin
;
idftp.OnWork:= IdFTPWork;
try
idftp.Get(name,tstream,true);
finally
tstream.Free;
idftp.Free;
end;
end;

procedure DLthread.Execute;
begin
{ Place thread code here }
Synchronize(DownLoadFile);
//觉得这里用得不好 不过不在调怎么改
end;
 
放个IdAntiFreeze1上去 最好用API函数写上传下载 因为你怎么用功 indy系列都存在这样那样的不完美 不是真正专业的首选 要不怎么会有foxmail等软件的存在 显然 他们不是用indy的
 
这个不是完美不完美的问题,因为id控件是使用堵塞模式的,所以界面会没反应,你可以在线程里面使用,也可以在数据传输过程中调用 application.ProcessMessages;
来处理消息啊.
 
转让控制权 很多时候对INDY也不起作用的 网络编程方面的软件我写过一些几是个以上的收费软件了 不敢说是我的强项 只能说这只是我个人的感受 3楼狠厉害 在下搬张凳子向您学习
 
楼上的说话不中听,indy控件应付大部分应用场合差不多了.比如很多发垃圾邮件的程序就是用了indy控件,导致带indy信息的邮件经常被一些大的邮件服务商屏蔽掉.
我也用过indy控件,大文件传输,是用的线程模式.
一般的发发邮件,小量网络传输,在ondata事件中更新进度条并调用一下application.ProcessMessages就差不多了.
另外 IdAntiFreeze1控件也是调用的 application.ProcessMessages.
 
因为indy挺多功能封装好 用起来比较方便 所以一开始也就没去想用api写
ufo!说的方法看过 可以试下
谢谢两位了
 
后退
顶部