2009-09-07 6 views
0

Je veux que du code soit déclenché toutes les secondes. Habituellement, je crée un Timer et un lien vers son événement. Je me demandais s'il y avait un meilleur moyen. Peut-être sans l'exigence d'implémenter IDisposable.Comment légères enregistrer un événement périodique?

Éditer: Ma principale préoccupation est LoC. Je ne me sens pas envie d'écrire toute une classe quand quelque chose le long des lignes de cela pourrait fonctionner aussi:

System.RegisterPeriodicEvent (1000,() => { Syso("asdf"); }; 

Dans mes rêves, cet événement est automatiquement non enregistrée dès que la menace actuelle se termine. J'ai l'impression que je devrais juste écrire une classe qui implémente la méthode ci-dessus.

+2

Dans quel contexte? Dans une application Windows? Dans une application unique ou multi-thread? Quel est le problème (et non-léger) sur IDisposable? –

+0

Oui, application Windows. Multithreadé. Rien de mal avec IDisposable, juste beaucoup de LoC avec peu de valeur réelle. – mafu

+0

Je considère que la prévention des fuites de mémoire a une valeur assez importante. –

Répondre

1

Si ce n'est pas cassé, n'essayez pas de le réparer.

Exécution x chaque code y quantité de temps est ce qu'une minuterie fait, et il le fait très bien. Comme pour éviter IDisposable, pas vraiment, non sans créer des fuites de mémoire de toute façon. Les deux seules façons que je peux penser à faire ceci est avec les minuteurs de noyau primitifs (qui doivent être libérés, IDisposable), ou avec un fil et Thread.Sleep() ou similaire (et alors vous devez tuer le fil quand vous avez terminé, encore IDisposable).

0

Ce n'est pas vraiment une manière légère de faire les choses, mais Retlang a une fonctionnalité de minuterie très agréable. En particulier, il traite d'emblée des problèmes de threads désagréables (en sérialisant les appels) et vous permet d'entrelacer le travail piloté par des événements avec des minuteurs.

Le meilleur de tous, vous disposez de la fibre et vous disposez de l'événement. Ce n'est pas trivial cependant: vous devez concevoir votre code autour de l'API (que vous considérerez plus tard comme digne d'intérêt, mais qui ressemble d'abord à une douleur dans le cou).

Questions connexes