629 votes

System.Timers.Timer vs System.Threading.Timer

J’ai été vérifier quelques-unes des timers possibles ces derniers temps, et les Threading.Timer et les Timers.Timer sont ceux qui ont l’air nécessaire pour moi (car il supportent le pool de thread).

J’ai fais un jeu, et j’ai l’intention à l’aide de tous types d’événements, avec des intervalles différents, etc..

Qui serait le meilleur ?

405voto

David Andres Points 13569

Cet article propose une explication assez complète:

http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

La différence exacte semble être ce Système.Les minuteries.La minuterie est orienté vers les applications multithread et est donc thread-safe via son SynchronizationObject de la propriété, tandis que le Système.Le filetage.La minuterie est paradoxalement pas "thread-safe" out-of-the-box.

Je ne crois pas qu'il existe une différence entre les deux, comme il se rapporte à la taille de votre intervalles peuvent être.

210voto

Tim Lovell-Smith Points 2635

System.Timers.Timer est un Système.ComponentModel.Composant encapsule une System.Threading.Timer, et fournit des fonctionnalités supplémentaires pour la distribution sur un fil.

System.Windows.Forms.Timer au lieu enroule une native de message uniquement-HWND et utilise la fenêtre de minuteries pour déclencher des événements pour que Hwnd thread d'INTERFACE utilisateur.

Si votre application n'a pas d'INTERFACE utilisateur, et que vous voulez le plus léger et polyvalent .Net minuterie possible, parce que vous êtes heureux de trouver votre propre filetage/expédition de régime, Système.Le filetage.La minuterie est aussi bon qu'il obtient dans le cadre.

(Je ne suis pas sûr de bien comprendre ce que la supposée " pas "thread-safe" avec le Système.Le filetage.Minuterie. C'est peut-être juste même comme demandé dans cette question: Thread-la sûreté du Système.Les minuteries.Minuterie vs Système.Le filetage.Minuterie, ou peut-être tout le monde veut juste dire que:

a) il est facile d'écrire des conditions de course lorsque vous utilisez des minuteries. E. g. voir cette question: Minuterie (Système D'.Threading) fil de sécurité

b) re-entrancy de la minuterie notifications, où votre événement timer peut déclencher et vous rappeler une deuxième fois avant de terminer le traitement de la première manifestation. E. g. voir cette question: "Thread-safe" exécution à l'aide de Système.Le filetage.La minuterie et le Moniteur )

126voto

Hero Points 801

Dans son livre «CLR Via c#», Jeff Ritcher déconseille d’utiliser , cette minuterie est dérivée de , lui permettant d’être utilisé dans l’aire de conception de Visual Studio. Alors qu’il serait seulement utile si vous voulez un timer sur une aire de conception.

Il préfère utiliser `` pour les tâches d’arrière-plan sur un thread ThreadPool.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X