如何使用ElapsedEventHandler(Timer)中的参数


List<System.Timers.Timer> myTimers = new List<System.Timers.Timer>();

private void startFunction()
{    
for (var parameter = 0; parameter < list.Count; parameter++)
{
System.Timers.Timer timer = new System.Timers.Timer(TimeSpan.FromMinutes(10).TotalMilliseconds);
timer.Elapsed += new ElapsedEventHandler(someFunction);
timer.Start();
myTimers.Add(timer);
}
}
// without the int parameter this code works 
public void someFunction(object sender, ElapsedEventArgs e, int parameter) 
{
// some code that have to run over time
}

因此,在someFunction方法中,我使用了一个参数(int(,如果没有它,这一切都很好。我只想通过这个函数发送一个参数,通过在线搜索和尝试不同的方法,它仍然不起作用。

有人知道如何使用函数someFunction每10分钟发送一个参数吗?

由于parameter只是一个局部变量,因此可以创建一个lambda来捕获此变量,并将其传递给someFunction方法。

private void startFunction()
{    
for (var parameter = 0; parameter < list.Count; parameter++)
{
var timer = new System.Timers.Timer(TimeSpan.FromMinutes((10)).TotalMilliseconds);
int parameterCopy = parameter;
timer.Elapsed += (o, e) => someFunction(o, e, parameterCopy);
timer.Start();
myTimers.Add(timer);
}
}

由于此问题,parameterCopy是必需的。

最新更新