Maison > développement back-end > C++ > System.Timers.Timer vs System.Threading.Timer dans les services Windows : quelle minuterie dois-je choisir ?

System.Timers.Timer vs System.Threading.Timer dans les services Windows : quelle minuterie dois-je choisir ?

DDD
Libérer: 2025-01-20 18:24:14
original
164 Les gens l'ont consulté

System.Timers.Timer vs. System.Threading.Timer in Windows Services: Which Timer Should I Choose?

Le meilleur choix de minuterie dans les services Windows

Dans les services Windows, il est courant d'effectuer régulièrement des tâches spécifiques. Il existe deux classes de minuterie principales disponibles à cet effet : System.Timers.Timer et System.Threading.Timer. Le choix de la minuterie est essentiel et nécessite une pesée minutieuse du pour et du contre.

Évitez les dépendances d'exécution inutiles

Lors de l'utilisation de minuteries dans les services Windows, il faut veiller à éviter d'utiliser System.Web.UI.Timer ou System.Windows.Forms.Timer. Ces minuteurs sont conçus spécifiquement pour les applications ASP.NET et Windows Forms. Leur intégration dans un service nécessite l'inclusion d'assemblys supplémentaires qui peuvent être incompatibles avec l'environnement d'exécution du service.

Comparaison de l'applicabilité de System.Timers.Timer et System.Threading.Timer

System.Timers.Timer et System.Threading.Timer sont deux solutions possibles pour utiliser des minuteries dans les services Windows. Cependant, certains facteurs spécifiques doivent être pris en compte lors du choix.

System.Timers.Timer

Pour utiliser System.Timers.Timer efficacement, le timer doit être déclaré au niveau de la classe pour garantir qu'il reste étendu tout au long de sa durée de vie. Cette mesure évite que le garbage collection ne mette fin prématurément à son opération.

Système.Threading.Timer

System.Threading.Timer a un mécanisme plus complexe. Cela nécessite de spécifier un délégué qui encapsule le comportement souhaité du minuteur. De plus, un mécanisme de synchronisation approprié (par exemple AutoResetEvent) peut être nécessaire pour coordonner l'interaction avec le système d'exploitation.

Exemple de code

L'exemple de code C# suivant illustre le déploiement de System.Timers.Timer et System.Threading.Timer dans un service Windows :

Exemple System.Timers.Timer

<code class="language-csharp">using System;
using System.Timers;

public class ServiceWithTimer
{
    private static System.Timers.Timer _timer;

    public static void Main()
    {
        _timer = new System.Timers.Timer(10000); // 类级别声明定时器
        _timer.Elapsed += OnTimedEvent;
        _timer.Interval = 2000;
        _timer.Enabled = true;

        Console.WriteLine("按任意键停止服务...");
        Console.ReadKey();
    }

    private static void OnTimedEvent(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine("定时器事件在 {0} 触发", e.SignalTime);
    }
}</code>
Copier après la connexion

Exemple System.Threading.Timer

<code class="language-csharp">using System;
using System.Threading;

public class ServiceWithTimer
{
    public static void Main()
    {
        AutoResetEvent autoResetEvent = new AutoResetEvent(false);
        TimerCallback timerCallback = CheckStatus;

        Console.WriteLine("创建定时器...");
        Timer stateTimer = new Timer(timerCallback, autoResetEvent, 1000, 250);

        Console.WriteLine("\n更改周期...");
        stateTimer.Change(0, 500);

        Thread.Sleep(5000);
        stateTimer.Dispose();
        Console.WriteLine("\n销毁定时器。");
    }

    private static void CheckStatus(object stateInfo)
    {
        AutoResetEvent autoResetEvent = (AutoResetEvent)stateInfo;
        Console.WriteLine("检查状态...");
        autoResetEvent.Set();
    }
}</code>
Copier après la connexion

Conclusion

System.Timers.Timer et System.Threading.Timer fournissent tous deux des solutions viables pour implémenter des tâches planifiées dans les services Windows. Le choix entre les deux dépend des exigences spécifiques du service et du degré de contrôle sur le comportement du temporisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal