繁体   English   中英

如何在 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方法上我使用了一个参数 (int)并且没有它,这很好。 我只想通过这个 function 发送一个参数,通过在线搜索和尝试不同的方法它仍然不起作用。

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

由于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是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM