Autor Beitrag
DoYou?
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 19.09.09 15:14 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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? Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 19.09.09 19:13 
user profile iconDoYou? hat folgendes geschrieben Zum zitierten Posting springen:
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? Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 19.09.09 21:59 
user profile iconDoYou? hat folgendes geschrieben Zum zitierten Posting springen:
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 ;) .

user profile iconDoYou? hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
lock (this) {
  count--;
  if (count == 0)
    ...
}
Gleiches beim WebClient.

_________________
>λ=