c# : Probs mit Threadsynchronisation

BeaTBoxX

Erfahrenes Mitglied
Tach zusammen :)

Habe ein Prob mit der Synchronisation von Threads.
Hab schon einiges gelesen über Monitor.. und Lock usw usw..
Lief soweit ich das ueberblicken konnte alles darauf hinaus, dass ein "kritischer" Abschnitt nicht unterbrochen wird sondern komplett durch laeuft. Schön und gut aber ist nich so ganz mein Ziel:

Wie im Funktionen-als-Threads-mit-Parametern Problem auch hier im Forum, möchte ich in meinem Tool hier etwas per FTP übertragen.
Die Übertragung (z.b. von 5 JPG Dateien) soll in nem eigenen Thread laufen:

Ziel:
Alle pics NACHEINANDER uppen.. nicht quasiparallel in 5 Threads.
und waehrend des Hochladens Abfrage ueber die bisher uebertragenen Bytes machen und die GUI (Progressbar) damit updaten.

Nun dachte ich, ich koenne das so lösen: indem ich ne Klasse erstelle mit Methoden, die als extra Thread laufen sollen(FTP Upload).
Da drin ein Attribut "aktiv" oderso.
Bevor ich das laden beginne setze ich aktiv z.b. auf 1. wenn fertig wieder auf 0.

In "Hauptthread" Frage ich nach starten des Upload Threads in ner Schleife ab ob aktiv bei diesem objekt auf 1 ist. und so lange frage ich die uebertragenen Bytes ab und update die GUI.
Bzw ich warte einfach bis fertig und starte dann die naechste Funktionalität.

Auch Connect und Login usw hab ich auf die selbe Art in nen Thread gepackt.

Problem: die "Warteschleife" zieht wohl nicht so wie ich will.
Er sagt z.b. Login noch nicht moeglich weil Connect noch nicht fertig ...usw...
obwohl ich dachte ich warte mit dieser Schleife darauf

Nen Codeausschnitt pack ich heut abend noch dazu.
Kann von euch generell schon jemand was sagen ob der gedankengang sinn macht? Oder obs evtl ne elegantere Lösung gibt?



Danke !

Gruß
Frank
 
Die Daten in einem Thread zu übertragen ist schon ok. Da kannst du die Dateien ohnehin nacheinander senden. Allerdings würde ich nicht in einer Schleife auf dein Objekt zugreifen und ständig abfragen ob es noch aktiv ist und wieviele Bytes übertragen wurden.

Mach dir eher 3 Events:
- OnConnected
- OnDisconnected
- OnSentBytesCountChanged

Auf diese Weise teilt dir dein eigenes Objekt von selbst mit, in welchem Status es ist und wieviele Bytes übertragen wurden. So kannst du beispielsweise bei jedem übertragenen KB das Event OnSentBytesCountChanged auslösen und dort die genaue Bytes-Anzahl als Argument mitsenden.
 
Zurück