我阅读了MSDN网站以及所有内容,但我找不到关于如何引发接受可能是string
或double
参数的定时事件的简单说明。提供的示例使用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#的新手,所以请耐心等待。我知道我没有启用计时器,但此代码中可能缺少其他关键部分,但我刚发布它以使我的问题清楚。
答案 0 :(得分:3)
因此,基于我们的评论主题,我发现这样的事情发生了:
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
之后你需要做的其他事情也可以是它自己的方法。
答案 1 :(得分:2)
因此,您希望忽略传递给给定事件处理程序的一些参数,并添加一些固定值的其他参数。你刚刚展示了如何做到这一点;你创建了一个新的Timer签名方法,然后你省略了你不想要的参数,并添加了你想要的一些固定值。你认为这是一个完成你想要的相当冗长的方法是正确的。确实有一种更简洁的语法。您可以使用匿名方法,更具体地说是lambda,来执行您想要的操作。这是语法:
startTimer.Elapsed += (s, args) => Pressure_Effect(2.5, startTimer.Interval);