Entwickler-Ecke
Basistechnologien - Logisches Problem mit Threads
DoYou? - Sa 19.09.09 15:14
Titel: Logisches Problem mit Threads
Hi,
ich verwende WebClient.DownloadData(Async) um den Inhalt von verschiedenen Seiten herunterzuladen und damit zu arbeiten (auf Vorkommen von bestimmten Strings prüfen). Da es nicht nur um zwei, drei Seiten geht, sondern um deutlich mehr, dachte ich daran Threads zu benutzen. Doch wie realisiere ich das? Wie kann ich Threads 'einreihen', sodass wenn ein Thread beendet ist, der nächste Thread sofort startet und nicht auf die Beendigung aller Threads gewartet wird?
Danke
Kha - Sa 19.09.09 16:34
:welcome:
Wenn du sowieso schon DownloadDataAsync benutzt, brauchst du keine eigenen Threads mehr. Du führst die Methode auf dem UI-Thread aus, der danach wieder weiter läuft. Wenn der Download fertig ist, wird das DownloadDataCompleted-Event aufgerufen.
DoYou? - Sa 19.09.09 18:55
Hi,
aber wenn die Schleife ca. 100 Mal durchlaufen wird, wäre es doch besser Threads zu benutzen, oder?
Also ich habe es jetzt mit ThreadPool.QueueUserWorkItem gemacht, aber ich weiß immer noch nicht, wie ich feststellen kann, ob alle Threads fertig sind... :(
Kha - Sa 19.09.09 19:13
DoYou? hat folgendes geschrieben : |
| aber wenn die Schleife ca. 100 Mal durchlaufen wird, wäre es doch besser Threads zu benutzen, oder? |
Ich kann von hier aus leider schlecht feststellen, was da in deiner Schleife so steht, aber wenn es um DownloadDataAsync geht, sind 100 Aufrufe überhaupt kein Problem. Probier es einfach mal aus.
DoYou? - Sa 19.09.09 19:39
Aber dann wüsste ich nicht wie man den Rest meines Quelltextes entsprechend anpasst, sodass ausschließlich DownloadDataAsyc benutzt werden kann :(
Ich frage einfach mal konkret:
Gibt es eine Möglichkeit fest zu stellen, ob alle Threads aus dem ThreadPool durchlaufen wurden / beendet / fertig sind?
Kha - Sa 19.09.09 21:59
DoYou? hat folgendes geschrieben : |
| Aber dann wüsste ich nicht wie man den Rest meines Quelltextes entsprechend anpasst, sodass ausschließlich DownloadDataAsyc benutzt werden kann :( |
Ich behaupte einfach mal selbstsicher: Ich schon :P . Also zeig mal her ;) .
DoYou? hat folgendes geschrieben : |
| Gibt es eine Möglichkeit fest zu stellen, ob alle Threads aus dem ThreadPool durchlaufen wurden / beendet / fertig sind? |
Nein, nicht direkt. Wenn du ein Klassenfeld
count hast, das die Anzahl der gestarteten Threads enthält, könntest du nach getaner Arbeit so etwas machen:
C#-Quelltext
1: 2: 3: 4: 5:
| lock (this) { count--; if (count == 0) ... } |
Gleiches beim WebClient.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!