Если вы загружаете свой файл в HTTP, вы можете использовать этот метод:
http://msdn.microsoft.com/en-us/library/7fy67z6d.aspx
Таким образом, вам придется разделить ваш файл на несколько временных файлов, а затем объединитьих.
Но вы должны быть уверены, что эта функция включена на стороне сервера (я не знаю, по умолчанию ли она).
И, как некоторые говорили, выПроизводительность увеличится, поэтому Free Download Manager так полезен: он загружает несколько частей вашего файла одновременно.
Чтобы сделать это с несколькими потоками:
class FileDownloader{
int Start;
int Count;
string PathTemp;
string Url;
FileDownloader(url,start,count){
url = Url;
Start =start;
Count = count;
PathTemp = Path.GetTempFileName()
}
void DoDownload(){
//do your thing with stream and request and save it to PathTemp
}
}
Здесьваш код для инициализации списка загрузчиков:
List<FileDownloader> filewonloadersList = new ListFileDownloader>();
System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://stackoverflow.com/robots.txt");
req.Method = "HEAD";
System.Net.WebResponse resp = req.GetResponse();
int responseLength = int.Parse(resp.Headers.Get("Content-Length"));
for(int i = 0;i<response.Length;i = i + 1024){
filewonloadersList.Add(new FileDownloader("http://stackoverflow.com/robots.txt",i,1024));
}
И ваша программа инициализирует X FileDownloader в списке (здесь не указана эта логика, я сосредотачиваюсь на мелочах)
List<Thread> threadList = new List<Thread>();
foreach(FileDownloader aFildeDownloader in filewonloadersList)
{
Thread aThread = new Thread(aFildeDownloader.DoDownload) //this method will be called when the thread starts
threadList.Add(aThread);
aThread.Start();
}
foreach(Thread aThread in threadList)
{
aThread.Join();//will wait until the thread is finished
}
//all the downloader finished their work now you can go through your downloader list and concatenante the temps files