动态创建计时器并确定哪个计时器正在引发tick事件

时间:2017-01-03 13:34:08

标签: c# timer

我在Web应用程序中工作,我需要根据数据库中的记录数动态创建Timers。我能够做到这一点,但问题是我无法识别哪个计时器正在引发嘀嗒事件。

以下是我正在使用的示例代码:

Timer[] timers = new Timer[Wavcount];
for (int i=0;i<Wavcount;i++) {
    Timer t1 = new Timer();
    t1.Interval = 1000;
    t1.Elapsed += new ElapsedEventHandler(SomeStaticMethod);
    t1.Start();
}

private static void SomeStaticMethod(object sender, ElapsedEventArgs e) {
    Timer t1 = (Timer)sender;
    duration = duration + 1;
}

2 个答案:

答案 0 :(得分:0)

.NET Core使事情变得更容易,在这里您可以为经过/滴答事件提供一个对象,如下所示:

    ...
    foreach(var serviceViewModel in ServiceViewModels)
    {
        var timer = new Timer(PollSource, serviceViewModel, 0, serviceViewModel.PollingInterval * 1000);
    }
}

private void PollSource(object stateInfo)
{
}

在“ PollSource”中,您将以“ stateInfo”的形式获取数据,在我的情况下,该视图模型包含了回调中所需的所有信息。

答案 1 :(得分:-1)

因此,每个计时器都需要一些名称。由于计时器本身没有任何可以使用的东西,你可以通过将调用包装在lambda函数中直接向被调用的函数提供所需的信息:

Timer[] timers = new Timer[Wavcount];
for (int i=0; i < Wavcount; i++)
{
    Timer t1 = new Timer();
    t1.Interval = 1000;
    t1.Elapsed += (s, e) => SomeStaticMethod(s as Timer, e.SignalTime, "Timer " + i);
    t1.Start();
}

private static void SomeStaticMethod(Timer timer, DateTime signalTime, string timerName)
{
    Console.WriteLine(timerName + " fired at " + signalTime);
}