2016-01-23 18 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