用Lambda代替方法引用的C#计时器?
假设我有以下代码:用Lambda代替方法引用的C#计时器?,c#,timer,lambda,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( ob
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的理解非常缺乏,但是…当然,只是:
myTimer.Elapsed += (sender, args) => secondsElapsed++;
lambda表达式的参数基本上必须与您试图将其转换为的委托的参数相匹配
根据您使用的计时器是否总是在同一线程上触发,您可能需要使用:
myTimer.Elapsed += (sender, args) => Interlocked.Increment(ref secondsElapsed);
谢谢,自从你是第一个,我会回来接受的。谢谢^ ^,我知道这将是一场紧张的比赛。我真的很惊讶以前没有人问这个问题(至少从我发现的情况来看)。@VSO:根据我能看到的时间戳,这不是第一个。。。(14:42:14Z对14:41:53Z)。。。但是你可以接受任何你想接受的。OP有权使用他们想要的任何标准来接受答案。@VSO:再说一遍:没有什么可以说你必须接受第一个答案。如果你想接受拉里奥鲁的回答,请继续:)非常感谢你的详细解释。
myTimer.Elapsed += (sender, e) => {secondsElapsed++;};