2010-10-15 18 views
3

J'ai une minuterie qui ne déclenchera pas la fonction associée lorsque le temps est écoulé. J'ai défini un événement Tick. J'ai mis la propriété Interval à 12000 et j'ai fait myTimerObject.Start();.Les temporisateurs fonctionnent-ils lorsqu'ils sont démarrés à partir d'un BackgroundWorker?

J'ai toutefois mis cette minuterie hors tension dans un thread séparé (quelque part dans un BackgroundWorker). Ma théorie est que même si la minuterie semble démarrer correctement, le thread est détruit une fois que la fonction DoWork associée à de BackgroundWorker est exécutée, ce qui provoque également la destruction de l'événement timer.

Est-ce vrai? Y a-t-il d'autres raisons possibles pour lesquelles l'événement timer ne se produit pas?

+0

Qu'essayez-vous de faire avec la minuterie? Quel type de minuteur est-il (System.Threading, System.Windows.Forms, System.Timers). Cela compte. Veuillez poster votre code, et lisez ce lien en attendant une réponse. http://msdn.microsoft.com/en-us/magazine/cc164015.aspx –

Répondre

4

Pieter, le problème n'est pas le thread à partir duquel le Timer est démarré, mais plutôt le fait que vous ne gardiez pas de référence en direct, d'où la collecte des ordures.

De MSDN documentation sur minuterie (voir la note sous la rubrique « Remarques »):

Tant que vous utilisez une minuterie, vous devez garder une référence. Comme avec tout objet géré, un temporisateur est soumis à la collecte des ordures lorsqu'il existe aucune référence. Le fait qu'un temporisateur soit toujours actif n'empêche pas que soit collecté.

+0

Vous l'avez dit beaucoup plus éloquemment :-) –