Threading - Timer

Hallo,

Ich habe eine Funktion die in einem seperaten Thread läuft.

private void Anfang()
{

//Thread erstellen und starten
Thread testThread = new Thread(new ThreadStart(DoSomething));
testThread.Start();
}

Nun möchte ich einen Timer starten der angibt wie lange der Thread max. laufen darf.
Falls die Zeit erreicht ist und der Thread noch lebt soll er beendet werden.

Leider habe ich keine Ahnung wie ich das anstellen soll.

Welchen Timer muß ich nehmen, den aus Threading oder aus Windows.Forms ?
Und muß das Objekt testThread dazu global sein ?
Denn wenn ich es so lasse, kann ich ja nach dem .Start nicht mehr direkt darauf zugreifen, da ich die Funktion dann verlasse.

Oder kann sich sogar der die Funktion DoSomething() selbst darum kümmern das sie nur eine max. Laufzeit haben darf.
Timerfunktion die alle paar Ticks ein Event auslöst in dem ich nachfrage wie lange er schon läuft.

Bin für jeden Tipp dankbar !
mfg
Martin

Hi!

Normalerweise hat man in der Thread-Prozedur (also in Deinem „DoSomething“) etwas eingebaut, das überprüft, ob der Thread noch weiterlaufen soll - letztlich reicht eine bool-Membervariable (private volatile bool _AbortThread = false:wink:, die zyklisch im Thread überprüft wird. Anfangs ist sie auf false, wenn man will, dass sich der Thread beendet, setzt man sie einfach auf true.
Bei der nächsten Überprüfung wird die Thread-Prozedur einfach verlassen - der Thread endet.
Wann Du die Variable auf true setzt, bleibt ganz Dir überlassen.

Oder Du verlagerst die Laufzeitüberprüfung in die Threadprozedur selbst, indem Du z.B. eine DateTime-Variable statt bool nimmst.
Diese Variable setzt Du beim Start des Threads auf DateTime.Now und im Thread überprüfst Du zyklisch, ob DateTime.Now - Startzeit [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]