Цитата:
Сообщение от Hint
Странная постановка задачи.
Зависает скорее не сохранение, а загрузка файла. Не может файл скачиваться быстрее, чем записываться на локальный диск. Скачку и сохранение надо делать в отдельном потоке с информированием формы через SendMessage. Типа TDownloader.Create('http://example.com/file.zip', 'C:\file.zip', frmMain.Handle). Объект TDownloader в процессе шлет форме сообщения о прогрессе, в случае ошибки и при завершении загрузки.
Зачем делать новый поток, если основной поток будет в цикле ждать его завершения? При вызове Application.ProcessMessages форма конечно будет перерисовываться, и кнопки будут нажиматься, но по-моему так делать не стоит.
|
Подвисает именно сохранение (двигать окошко нельзя).
Я делал через Indy Http тк там можно считать % сколько скачалось и прочее. А потом стрим сохранял на диск.
Добавлено через 5 минут
Цитата:
Сообщение от G1ta0
Код:
Self.Priority:=tpHighest; //Стартуем с высоким приоритетом
Эта строчка от лукавого.
|
Переделывал под себя, вроде как не влияет..
Цитата:
Сообщение от G1ta0
Код:
SaveFile:=TSaveFile.Create(stream,path);
Application.ProcessMessages;
Тебе надо в цикле проверять завершение потока, попустно делая Application.ProcessMessages, чтобы GUI не зависало. Заюзай TEvent.
|
Файл качается, но на диске или создается файл в 0 метров или же вообще пустота.
Чтобы не зависало использую антифриз.