Exemple simple d’utilisation du système. Minuteries. Minuterie en C #

J’ai lu le site MSDN et tout, mais je ne trouve pas d’explication simple sur la manière de déclencher un événement timed qui accepte des arguments qui peuvent être une ssortingng ou double . Les exemples fournis utilisent ElapsedEventArgs mais aucun ne montre une bonne façon de mettre en œuvre mes propres arguments pour les événements ElapsedEventArgs .

Mon code (je n’ai pas encore testé, c’est peut-être une erreur):

 private double Pressure_Effect(double p, int t){ time=(double) t; v=(((p/(rho*y))-g)*time)/(1.0+(mu*time/(rho*y*x))); return v; } private void Time_Handle(){ System.Timers.Timer startTimer=new System.Timers.Timer(70); startTimer.Elapsed += new ElapsedEventHandler(Activate_Pressure); } private void Activate_Pressure(object source, ElapsedEventArgs e){ pressure=2.5; double v=Pressure_Effect(pressure, 70); } 

Ce que je veux faire, c’est Activate_Pressure est redondant au sens où si je peux transmettre l’événement directement à Pressure_Effect je ne sais pas comment. Je suis nouveau en C #, alors s’il vous plaît, supportez-moi. Je sais que je n’ai pas activé le chronomètre et que d’autres éléments essentiels sont peut-être manquants dans ce code, mais je viens de le poster pour que ma question soit claire.

Donc, basé sur notre fil de commentaire, je vois quelque chose comme ceci qui se passe:

 class PressureModel { private double interval = 70; private double pressure = 2.5; private DateTime startTime; private Timer timer; // assuming rho, y, g, x, and mu are defined somewhere in here? public PressureModel() { timer = new Timer(interval); timer.Elapsed += (sender, args) => PressureEvent(sender, args); } public void TimerStart() { startTime = DateTime.Now; timer.Start(); } public void TimerStop() { timer.Stop(); } private void PressureEvent(object sender, EventElapsedArgs args) { // calculate total elapsed time in ms double time = (double)((args.SignalTime - startTime).TotalMilliseconds); // calculate v double v = CalculateV(time); // ... do you other work here ... } private double CalculateV(double time) { double p = this.pressure; // not sure where the other variables come from... return (((p/(rho*y))-g)*time)/(1.0+(mu*time/(rho*y*x))); } } 

Je ne pense pas que ce soit mauvais de séparer un peu plus le PressureEvent . Je voudrais tout de même conserver une fonction qui calcule v seule, en fonction de certains parameters, et tout ce que vous devez faire une fois que vous avez v peut également être sa propre méthode.

Donc, vous voulez ignorer certains des arguments passés au gestionnaire d’événements donné et en append d’autres d’une valeur fixe. Vous venez de montrer comment vous pouvez le faire. vous créez une nouvelle méthode de signature que l’événement du minuteur attend, puis vous omettez les arguments que vous ne voulez pas et vous ajoutez des valeurs fixes que vous voulez. Vous avez raison de penser qu’il s’agit d’une méthode plutôt verbeuse pour accomplir ce que vous voulez. Il existe en effet une syntaxe plus concise. Vous pouvez utiliser une méthode anonyme, plus précisément un lambda, pour faire ce que vous voulez. Voici la syntaxe pour cela:

 startTimer.Elapsed += (s, args) => Pressure_Effect(2.5, startTimer.Interval);