Desidero scaricare un file da Internet e immagino che questo dovrebbe essere un compito semplice. Provando diversi approcci ho scoperto che ognuno ha il suo lato negativo. I temi principali sono:La connessione non scade durante l'utilizzo di Indy
- applicazione si blocca fino a quando si scarica il file
- applicazione si blocca per sempre se la connessione a Internet viene persa/server non risponde.
(dettagli:
How to retrieve a file from Internet via HTTP?
The connection does not timeout while downloading file from internet)
Così, finalmente ho usato i suggerimenti che ho ricevuto da più persone di utilizzare le librerie "pro" come Indy. Comunque, Indy non è molto meglio dei pezzi di codice che ho provato (ma è molto più grande e difficile da mantenere). Durante l'utilizzo di Indy l'applicazione non si blocca solo per brevi periodi, quindi è ancora (in qualche modo) utilizzabile. Tuttavia, l'applicazione non può essere chiusa fino al termine del download (mai se le connessioni Internet vengono interrotte).
Altre persone hanno riportato lo stesso problema: http://borland.newsgroups.archived.at/public.delphi.internet.winsock/200609/0609079112.html
https://forums.embarcadero.com/thread.jspa?threadID=25199&tstart=90
Quindi, c'è qualche violazione al sistema che ho dovuto fare per TIDAntiFreeze al fine di farlo funzionare?
Inoltre, la proprietà ConnectTimeout non viene riconosciuta.
fIDHTTP := TIDHTTP.Create(NIL);
fIDHTTP.ConnectTimeout:=5000;
Dovrei abbandonare Indy e tornare alla idea originale di download in un thread separato e alla fine il filo quando non risponde (almeno in questo modo mi libero di librerie 3a parte)? Ci saranno effetti collaterali imprevedibili se lo faccio?
Utilizzo: Delphi 7, Indy
10.1.5
10.5 (probabilmente).
Grazie
Hai provato a utilizzare un thread per scaricare il file in background? – mjn
Indy 10.1.5 è molto vecchio, la corrente è 10.5.7 – mjn
La nuova versione di Indy si rifiuta di installare sul mio computer. – Ampere