Чего не понимают, тем не владеют
Гёте
Если без мультипоточности, то вам надо спуститься ниже - неспоредственно в функцию чтения сетевого ресурса (загрузки из потока) и, например, разбить её на куски - кторые можно взывать последовательно друг за дургом, в промежутках передевая управление основному коду.Например: "Проверка URL"-"Запрос"-"скачка от 0 до N1 байт"-"скачка от N1 до N1+x байт"-"..".
Или (если этому соотвествует логика и общая концепия программы) - встроить элементы основного (а получается не очень-то основного) кода в функцию скачивания.
Это, если с алгоритмической точки зрения. В масштабах ОС эта концепция перерождается в мультипоточность.
С уважением.