Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Lambda代替方法引用的C#计时器?_C#_Timer_Lambda - Fatal编程技术网

用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++;};