如何在 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