2016-02-11 11 views
5

比方說,我有以下代碼:用Lambda而不是方法引用的C#計時器?

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表達式的理解在這裏,但仍然...

回答

11

當然,只是:

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

的爲lambda表達式參數必須匹配您試圖將其轉換爲的委託的參數。

取決於是否Timer你使用始終閃光在同一個線程或沒有,你可能要使用:

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

非常感謝您的詳細解釋。 – VSO

4
myTimer.Elapsed += (sender, e) => {secondsElapsed++;}; 
+0

謝謝,自從你第一次以後,會回來接受。 – VSO

+0

謝謝^ _ ^,我知道這將是一場緊張的比賽。 – Rariolu

+0

我真的很驚訝之前沒有人問過這個問題(至少從我發現的)。 – VSO

相關問題