如何在 ElapsedEventHandler(计时器)中使用参数?
How do I make use of a parameter in a 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 方法上我使用了 parameter (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
是必需的,因为 this issue。
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 方法上我使用了 parameter (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
是必需的,因为 this issue。