Hallo Zusammen,
ich habe auf der Form einen Timer welcher periodisch
diesen Thread erzeugt. Normalerweise ist der Thread fertig bevor
der Timer erneu zuschlägt. Theoretisch ist es jedoch möglich dass der Thread
immer noch läuft. Deshalb würde ich gerne abfragen
ob der Thread immer noch läuft. Wenn ja, soll der Timer
einfach eine Periode auslassen.
Thread newThread =
new Thread(new ThreadStart(CheckEmails));
newThread.Start();
Hat jemand eine Idee?
Gruß Kostas
Hier bieten sich die Properties ThreadState oder IsAlive an.
q.e.d.
Hallo Kostas,
deine jetzige Variante ist eher suboptimal:
Halten den Timer besser an, wenn du den Thread startest und starte ihn erneut, wenn er fertig ist.
Evtl. musst du dann allerdings mit dem Interval aufpassen und dieses u.U. entsprechend anpassen, wenn du das neue Verhalten nicht willst.
Andernfalls kannst du auch einfach eine volatile
Varible verwenden, in der du dir merkst, ob der Thread gerade läuft.
Zudem würde ich den Threadpool verwenden, statt jedes Mal einen neuen Thread zu erzeugen (spart Resourcen!).
Hallo Kostas,
neben den von ProgrammierTroll genannten Eigenschaften kommt es darauf was du mit den Emails dann machen willst. Ev. bietet sich hierzu die SyncQueue <T> - Eine praktische Job-Queue bzw. allgemein eine Pipeline (Producer/Consumer) an und der Timer "weckt" den Producer-Thread.
Zudem würde ich den Threadpool verwenden, statt jedes Mal einen neuen Thread zu erzeugen
Beim Herunterladen von Emails könnte es auch andersrum sein, denn (v.a. wenn Anhänge dabei sind) ist das eine relativ lange dauernde Aktion und wenn sonst noch Threads benötigt würden, dann wäre es besser einen direkt zu erstellen bzw. bei Tasks mit LongRunning diese zu erstellen. Exaktes kann hier aber nur eine Messung bzw. Profiling zeigen.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo Zusammen,
ich habe es jetzt üben die Klasse BackgroundWorker gemacht.
Der Timer stoppt sich selbst und startet danach den WorkerThread
per RunWorkerAsync();
Wenn der event RunWorkerCompleted gefeuert wird, wird der
der Timer wieder gestartet.
Die Implementierung war für mich am einfachsten und es scheint soweit
zu funktionieren. Zumindest habe ich beim Testen es nicht geschafft die
Implementierung ins schwanken zu bringen.
Dankeschön für die Hilfestellung.
Gruß Kostas