locomarco
Commander
- Registriert
- Aug. 2009
- Beiträge
- 2.446
Hab einen kleinen Downloadmanager geschrieben dem ich eine beliebige Anzahl von Links geben kann.
Die Links werden in eine Queue<Uri> gesteckt und danach von 4 WebClients Asynchron runtergeladen. Sollten sie jedenfalls.
Der erste WebClient startet den Download, die anderen 3 machen gar nichts. Wenn der erste WebClient mit dem Download fertig ist, wird der nächste Link aus der Queue genommen aber der download startet nicht.
Es wird also genau eine Datei runtergeladen, dann passiert nichts mehr.
Ich hoffe mal einer von euch kann mir dabei Helfen
Folgender Code wird in einem Thread ausgeführt:
Die Links werden in eine Queue<Uri> gesteckt und danach von 4 WebClients Asynchron runtergeladen. Sollten sie jedenfalls.
Der erste WebClient startet den Download, die anderen 3 machen gar nichts. Wenn der erste WebClient mit dem Download fertig ist, wird der nächste Link aus der Queue genommen aber der download startet nicht.
Es wird also genau eine Datei runtergeladen, dann passiert nichts mehr.
Ich hoffe mal einer von euch kann mir dabei Helfen

Folgender Code wird in einem Thread ausgeführt:
Code:
public void webClientDownload(object _folder)
{
string folder = (string)_folder;
while (linkQueue.Count > 0 && !isClosing)
{
foreach (WebClient webClient in webClients)
{
if (!webClient.IsBusy && linkQueue.Count > 0)
{
Uri link = linkQueue.Dequeue();
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(link);
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
if (GetResponseStatus(webResponse) == ResponseStatus.Success)
{
//header = [attachment;filename="file.ext"]
string filename = webResponse.Headers["Content-Disposition"].Split('"')[1];
webClient.DownloadFileAsync(link, folder + filename);
Dispatcher.Invoke(new Action(delegate(){
queueCountLabel.Content = linkQueue.Count;
}));
}
else
{
MessageBox.Show(GetResponseStatus(webResponse).ToString());
}
}
}
}
}