使用Lambda而不是方法参考的C#计时器?

时间:2016-02-11 14:40:28

标签: c# timer lambda

我们说我有以下代码:

var secondsElapsed = 0;

Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler( iterateSecondsElapsed);
myTimer.Interval = 1000;
myTimer.Start();


//Somewhere else in the code:
public static void iterateSecondsElapsed( object source, ElapsedEventArgs e )
{
    secondsElapsed++; 
}

有没有办法在不定义DisplayTimEvent静态方法的情况下执行此操作?类似的东西:

myTimer.Elapsed += new ElapsedEventHandler( secondsElapsed => secondsElapsed ++);

我意识到我在这里表现出对lambdas的深刻理解,但仍然......

2 个答案:

答案 0 :(得分:14)

当然,只是:

myTimer.Elapsed += (sender, args) => secondsElapsed++;

lambda表达式的参数必须与您尝试将其转换为的委托的参数相匹配,基本上。

根据您使用的Timer是否始终在同一个帖子上触发,您可能需要使用:

myTimer.Elapsed += (sender, args) => Interlocked.Increment(ref secondsElapsed);

答案 1 :(得分:5)

  A       B
1 11000   0.25
2 18000   0.35
3 31000   0.42
4 60000   0.48
5 90000   0.50
6 1000000 0.55