Existe-t-il une classe de minuteur en C # qui ne figure pas dans l'espace de noms Windows.Forms?

StackOverflow https://stackoverflow.com/questions/169332

  •  05-07-2019
  •  | 
  •  

Question

Je souhaite utiliser une minuterie dans ma simple application .NET écrite en C #. Le seul que je puisse trouver est la classe Windows.Forms.Timer. Je ne veux pas faire référence à cet espace de noms uniquement pour mon application console.

Existe-t-il une classe de minuteur C # (ou similaire au minuteur) à utiliser dans les applications console?

Était-ce utile?

La solution

System.Timers.Timer

Et comme le dit MagicKat:

System.Threading.Timer

Vous pouvez voir les différences ici: http://intellitect.com/system-windows-forms-timer-vs-system-threading-timer-vs-system-timers-timer/

Et vous pouvez voir des exemples MSDN ici:

http://msdn.microsoft .com / fr-us / library / system.timers.timer (VS.80) .aspx

Et ici:

http://msdn.microsoft .com / fr-us / library / system.threading.timer (VS.80) .aspx

Autres conseils

Je recommanderais le Minuteur classe dans le System.Timers espace de noms. La Minuterie présente également un intérêt particulier. une> classe dans le System.Threading espace de noms.

using System;
using System.Timers;

public class Timer1
{
    private static Timer aTimer = new System.Timers.Timer(10000);

    public static void Main()
    {
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        aTimer.Enabled = true;

        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();
    }

    // Specify what you want to happen when the Elapsed event is 
    // raised.
    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    }
}

Exemple de document MSDN.

Il existe au moins le System.Timers.Timer et System.Threading.Timer classes que je suis au courant de.

Une chose à surveiller cependant (si vous ne l'avez pas déjà fait auparavant), dites si vous avez déjà l'espace de nom System.Threading dans votre clause using mais que vous voulez réellement utiliser le minuteur dans System.Timers dont vous avez besoin. faire ceci:

using System.Threading;
using Timer = System.Timers.Timer;

Jon Skeet a publié un article sur Timers dans son guide multithreading. Il vaut la peine de le lire: http://www.yoda.arachsys.com/csharp/threads/timers.shtml

Cette question est ancienne et les réponses existantes couvrent bien la question telle qu’elle était à l’époque. Entre temps, quelque chose de nouveau est arrivé.

Le minuteur, bien sûr, pour quoi?

L'utilisation d'un minuteur permet d'exécuter certains traitements avec un certain retard et / ou à intervalles réguliers. Il y a deux cas:

(1) C’est juste pour exécuter un code court périodiquement, sans aucun souci de thread, ni problème, ni désordre. Si le minuteur Windows Forms brut ne convient pas, System.Timers.Timer et sa propriété SynchronizingObject le rendent plus simple que System.Threading.Timer .

(2) ce que vous codez est dans le domaine du traitement simultané asynchrone. C’est traditionnellement source d’erreurs, difficile à corriger, à corriger, quel que soit le compteur de temps utilisé.

Dans le cas 2, vous pourriez vous en sortir avec une approche traditionnelle, mais attention, la complexité plane et est prête à vous dévorer non seulement une fois, mais à tout moment si vous ne faites pas le meilleur choix, avec des effets cumulatifs.

Maintenant, nous avons quelque chose de mieux

Si votre situation concerne un type d''événement " Manipulation (quelle que soit la manière dont elle est codée: touches du clavier, boutons de la souris, octets d’un port série, d’une connexion réseau, de mesures, etc.), vous devriez envisager la programmation réactive.

La programmation réactive a, ces dernières années, en quelque sorte découvert comment coder pour ces situations, sans tomber dans les pièges de la complexité.

Donc, techniquement, le lien suivant est une réponse à la question: il s’agit d’un temporisateur qui se trouve dans l’espace de noms System.Reactive.Linq : Méthode Observable.Timer (System.Reactive.Linq)

Pour être juste, c'est une minuterie qui vient bien jouer avec la mentalité de programmation réactive et beaucoup de choses qui changent la donne. Pourtant, ce pourrait être ou ne pas être le meilleur outil, selon le contexte.

Cette question étant centrée sur .NET, vous pourriez être intéressé par Bon introduction au .NET Reactive Framework

Ou bien, pour un document clair, illustré, plus général (non centré sur Microsoft), cela semble bon La introduction à la programmation réactive qu'il vous manquait .

System.Diagnostics.Stopwatch si votre objectif est de chronométrer combien de temps il faut quelque chose pour courir

Il est recommandé de ne pas utiliser la classe Timer de System.Timer .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top