Я хочу загрузить файл из Интернета, и я думаю, что это должно быть простой задачей.Пробуя несколько разных подходов, я обнаружил, что у каждого есть свой недостаток.Основные проблемы:
- Приложение зависает до тех пор, пока не загрузит файл
- Приложение зависает навсегда, если подключение к Интернету потеряно / сервер не отвечает.
(подробности:
Как получить файл из Интернета через HTTP?
Время соединения не истекает при загрузке файла из Интернета )
Итак, наконец, я воспользовался советами нескольких людей по использованию «профессиональных» библиотек, таких как Indy.Тем не менее, Indy не намного лучше, чем фрагменты кода, которые я пробовал (но он намного больше и сложнее в обслуживании).При использовании Indy приложение не зависает только в течение коротких периодов, поэтому оно все еще (каким-то образом) может использоваться.Тем не менее, приложение не может быть закрыто, пока загрузка не закончится (никогда, если подключение к Интернету разрывается).
Другие люди сообщали о той же проблеме: 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 (вероятно).
Спасибо