Hallo,
Ich habe eine kleine Konsolenanwendung geschrieben, welche mir den Inhalt verschiedener Url´s downloadet und lokal speichert.
Da es sich um eine größere Anzahl von Dateien handelt, will ich die Downloads Asyncron ausführen. Die Downloads werden in einer Schleife ausgeführt und in dem DownloadFileCompleted - Ereignis soll die Datei dann weiter verarbeitet werden (z.B sollen Änderungen am Text vorgenommen werden usw.)
Mein Problem ist nun folgendes: Sobald die Schleife durchgelaufen ist und somit alle Downloads gestartet wurden, beendet sich die Konsolenanwendung, ohne auf das abschließen aller Downloads zu warten.
Was mache ich hier falsch?
public void DownloadDatasheets()
{
ArticleImportFile[] res = engine.ReadFile(sourceFile);
int fileLines = res.Length;
// Downloading sheets
for (int i = 1; i < 10000; i++)
{
string url = res[i].sheet;
string fileDirectory = tempPath + res[i].map_id + ".txt";
try
{
WebClient client = new WebClient();
client.DownloadFileCompleted += client_DownloadFileCompleted;
client.DownloadFileAsync(new Uri(url), fileDirectory, res[i].map_id);
}
catch(Exception e)
{
Console.WriteLine(e);
}
}
}
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
// Edit downloaded Data here
}
Hey,
Von wo aus wird den DownloadDatasheets() aufgerufen?
Mal mit dem Debugger gecheckt, was dein Programm nach der Schleife macht?
Da ich nichts anderes sehe gehe ich davon aus das du die Methode im MainThread aufrufst.
Warum sollte dieser warten wenn er mit allem fertig ist, wenn du ihm nicht sagst auf was er warten soll.
Du kannst den MainThread mithilfe eines ManualResetEvents anhalten bis dein FileComplete event 10000 aufgetreten ist.
@ Console32
Die Methode wird im MaintThread aufgerufen.
Sry das ich diese Info nicht angegeben habe 🤔
Mit welcher Methode kann ich der ManualResetEvent Klasse denn sagen das ich das FileComplete Event 10000 mal auffgerufen haben möchte?
Komme da gerade noch nicht ganz so hinter.
Du hast alle Informationen, die du brauchst, und sogar ein Codebeispiel. Die Umsetzung ist deine Aufgabe. Vermutlich fällt es dir wie Schuppen von den Haaren, wenn du es nochmal durchdenkst. Bitte beachte, dass wir die Grundlagen voraussetzen, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1.