我想从互联网上下载一个文件,我想这应该是一个简单的任务。尝试了几种不同的方法,我发现每种方法都有自己的缺点。主要问题是:
- 应用程序冻结,直到它下载文件
- 如果 Internet 连接丢失/服务器没有响应,应用程序将永远冻结。
(细节:
如何通过 HTTP 从 Internet 检索文件?
从互联网下载文件时连接不会超时)
所以,最后我使用了我从几个人那里得到的建议来使用像 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 并返回在单独的线程中下载文件并在线程没有响应时结束线程的原始想法(至少这样我摆脱了第 3 方库)?如果我这样做,会有无法预料的副作用吗?
使用:Delphi 7,Indy 10.1.5 10.5(可能)。
谢谢