Hi zusammen,
ich habe in meinem Programm eine System.Timers.Timer, welcher alle X Millisekunden ein Event auslöst. Das funktioniert auch immer ganz gut, aber nach einer Zeit scheint er kein Event mehr auszulösen. Ich finde hierfür auch kein Muster. Ich hab eine Multithreading - Anwendung und habe schon überlegt, ob hier irgendwo ein Fehler auftritt und sich vielleicht der Timer - Thread verabschiedet. Aber jetzt ist mir noch eine andere Idee gekommen:
Wenn ein Timer ein Event wirft, weil die Zeit abgelaufen ist, muss ich dann den Timer wieder neu mit Start() starten? Oder macht er das immer automatisch? Im Moment macht er es zwar automatisch, aber hört nach einiger Zeit wohl damit auf.
Oder hat jemand irgendeine Idee, woran das liegen kann?
Gruß
Mike
Hallo miketech,
vielleicht wird der Timer vom CG entsorgt. Probier mal GC.KeepAlive.
herbivore
Hi,
ok also muss ich den Timer wohl nicht neustarten, danke 🙂 Das komische ist:
Also ich habe definitiv eine Referenz auf den Timer. Also zumindest auf die Klasse, wo der Timer steckt und diese hat eine private Variable mit dem Timer. Somit dürfte der GC die ja nicht wegräumen, oder?
Gruß
Mike
Hallo miketech,
dass eine Referenz existiert, heißt nicht, dass das Objekt auf jeden Fall am Leben bleibt. Siehe Speicheradresse adressof() ausgeben. Warum probierst du es nicht einfach?
herbivore
Hi,
klar bin schon dabei. Ich versuch nur auch ein bisserl den Background davon zu verstehen, danke.
Gruß
Mike
Was mir auch grad noch einfällt: Wenn ich myTimer.Stop() aufrufe und myTimer.Start() führt das aber zu keinem Fehler und der Timer läuft wieder. Kann das sein? Wenn der GC myTimer gelöscht hätte müsste das doch zu einem Fehler führen, oder?
Es ist tatsächlich so, dass sich in meinem Programm aber Zyklen befinden. Also A referenziert B und umgekehrt. Hier darf keines der Objekte jemals gelöscht werden. Vielleicht erklärt das die mysteriösen Fehler, die ich zur Zeit bekomme. Setz ich GC.KeepAlive dann jeweils in den Destruktor der Objekte? Also in A ein KeepAlive(b) in den Destruktor von A und genauso umgekehrt?
Gruß
Mike