Laden...

Rausfinden welcher Thread fertig ist bei meheren Threads

Erstellt von Siedlerchr vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.057 Views
S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 14 Jahren
Rausfinden welcher Thread fertig ist bei meheren Threads

Hi,

also ich hab ein Upload Programm das gleichzeitige Uploads macht, jeweils in einem eigenen Thread.
Sobald jetzt einer der beiden Threads fertig ist, soll (falls vorhanden) wieder ein neuer Thread gestartet werden mit einem Upload.
Mein Problem dabei ist, dass ich nicht weiß welcher Thread grade läuft und welcher fertig ist.

Kurzes Beispiel:
Einstellung 2 gleichzeitige Uploads
Insgesamt gibt es 3 Uploads die hinzugefügt wurden.
Die ersten beiden Uploads werden jetzt in jeweils eigenem Thread asugeführt.
Ist jetzt ein Thread schon eher fertig als der Andere

Was ich jetzt gerne hätte, das jetzt quasi der 3. Upload startet.
Ziel soll es sein das immer 2 Uploads gleichzeitig laufen.

Das Problem ist jetzt aber das ich die hintereinander in einer Schleife aufrufe:

 Thread UploadThread = new Thread(delegate() { RsUpload(file, AccUsername, AccPassword, accountType, proxy); });
UploadThread + i.Name = "Upl Thread " + i.ToString();
UploadThread.Start();
Console.WriteLine("Upload gestartet";);
tb_Main_Result.Text = "Upload gestartet...";

Das einzige womit ich die Threads unterscheiden kann ist der HashCode.
Jetzt will ich ja prüfen welcher Thread fertig ist und welcher nicht.

Meine Überlegung war das man das ich den Thread iwie mit dem Hash identifizieren kann, aber da wüsst ich jetzt nicht wie man sowas umsetzt.

Hat da jemand ne Idee wie ich rausfinden kann welcher Thread fertig ist oder das nen Event aufgerufen wird wenn ein Thread fertig ist ?

Gruß
Siedlerchr

916 Beiträge seit 2008
vor 14 Jahren

Das Zauberwort heißt Event, daher definiere ein Event das du feuerst sobald ein Thread seine Arbeit beendet hat. Dann musst du es nur noch gescheit auswerten.

edit: Ergänzung, die Methode RsUpload(..) ist ja deine dem Thread zugeteilte Methode, daher am Ende der Methode, einfach das eigens definierte Event feuern, denn ist die Methode beendet, wird ja auch der Thread beendet.

Again what learned...

3.971 Beiträge seit 2006
vor 14 Jahren

Verwende für sowas eine threadsichere Queue (beispielsweise Applikation mit Warteschlange [SyncQueue<T>-Klasse]). Deine Upload-Tasks schmeißt du alle (Anzahl ist beliebig) in die Queue. Zwei definierte Worker-Threads holen sich jeweils immer eine Task aus der Queue und verarbeiten diese. Nach beendigung holen sie sich anschließend (wenn vorhanden) wieder einen neuen.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 14 Jahren

Danke erstmal für die Tipps, ich werde das mal mit der Warteschlange probieren.