使用System的简单示例。 计时器。 C#中的定时器

我阅读了MSDN网站和一切,但我找不到关于如何引发定时事件的简单解释,该事件接受可以是stringdouble精度的参数。 提供的示例使用ElapsedEventArgs但没有显示实现我自己的参数的好方法。

我的代码(我没有测试过可能是错的):

 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); } 

我想要做的是Activate_Pressure是多余的感觉,如果我可以直接将事件传递给Pressure_Effect ,我不知道如何。 我是C#的新手,所以请耐心等待。 我知道我没有启用计时器,而且此代码中可能缺少其他关键部分,但我刚发布它以使我的问题清楚。

所以基于我们的评论主题,我发现这样的事情发生了:

 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))); } } 

我认为将PressureEvent分开一点并不坏。 在给定某些参数的情况下,我仍然会保留一个自己计算v的函数,然后一旦你有了v你需要做的其他事情也可以是它自己的方法。

因此,您希望忽略传递给给定事件处理程序的一些参数,并添加一些固定值的其他参数。 你刚刚展示了如何做到这一点; 你创建了一个Timer的事件所需的签名新方法,然后省略了你不想要的参数,并添加了你想要的一些固定值。 你认为这是一个完成你想要的相当冗长的方法是正确的。 确实有一种更简洁的语法。 您可以使用匿名方法,更具体地说是lambda,来执行您想要的操作。 这是语法:

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