我想从互联网上下载一个文件,我认为这应该是一个简单的任务。尝试了几种不同的方法后,我发现每种方法都有自己的缺点。主要问题如下:
- 应用程序冻结直到下载完成
- 如果网络连接丢失/服务器无响应,则应用程序永远冻结。
(详细信息请参见:
如何通过HTTP从互联网检索文件?
从互联网下载文件时连接不会超时 )
所以,最后我使用了来自几位专业人士的建议,使用“pro”库(如Indy)。然而,Indy并没有比我尝试过的代码片段更好(但它更大更难维护)。在使用Indy时,应用程序只会短暂地冻结,因此仍然可以(在某种程度上)使用。但是,在下载完成之前无法关闭应用程序(如果Internet连接断开,则永远无法关闭)。
其他人也报告了同样的问题:http://borland.newsgroups.archived.at/public.delphi.internet.winsock/200609/0609079112.html
https://forums.embarcadero.com/thread.jspa?threadID=25199&tstart=90
所以,我需要对TIDAntiFreeze进行一些黑客攻击才能使其工作?
此外,ConnectTimeout属性不被识别。
fIDHTTP := TIDHTTP.Create(NIL);
fIDHTTP.ConnectTimeout:=5000;
我应该放弃Indy并返回原始想法,在单独的线程中下载文件,并在其不响应时结束线程(至少这样我可以摆脱第三方库)吗?如果我这样做会有意想不到的副作用吗?
使用:Delphi 7,Indy 10.1.5 10.5(可能)。
谢谢