2016-01-23 52 views
1

我有两个函数。一个创建一个计时器,另外一个计时器到期时动作。计时器函数需要1个附加参数(int)。我需要将它传递给行动。下面是代码解释说:EventHandler中的C#数据

public void CreateTimer(int t) 
    { 
     System.Timers.Timer timer = new System.Timers.Timer(); 
     timer.Elapsed += new ElapsedEventHandler(DoAction(timer, ??, t)); 
     timer.Interval = 4000; 
     timer.Enabled = true; 
    } 

正如你所看到的,有在EventHandler??,我不知道,是什么把里面。这里是DoAction

public void DoAction(object sender, ElapsedEventArgs e, int l) 
    { 
     //some stuff here 
    } 

如何发送int l

回答

2

您可以将lambda表达式订阅到引用局部变量的事件。

timer.Elapsed += (s, e) => { DoAction(s, e, t); }; 
+0

感谢您的帮助,Maarten! – HeideKnight

+0

您可以在这里进行的另一个小的可读性优化是从lambda表达式中删除花括号;如果块中只有一条语句,则不需要它们。 – MichD

+0

@Michd为什么优化可读性? – Maarten