使用 lambda 而不是方法引用的 C# 计时器

本文关键字:引用 计时器 方法 lambda 使用 | 更新日期: 2023-09-27 18:34:08

假设我有以下代码:

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

意识到我在这里表现出对lambda的严重缺乏理解,但尽管如此......

使用 lambda 而不是方法引用的 C# 计时器

当然,只是:

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

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

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

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