Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态创建计时器,并确定引发滴答事件的计时器_C#_Timer - Fatal编程技术网

C# 动态创建计时器,并确定引发滴答事件的计时器

C# 动态创建计时器,并确定引发滴答事件的计时器,c#,timer,C#,Timer,我在web应用程序中工作,我需要根据数据库中记录的数量动态创建计时器。我能够做到这一点,但问题是我无法确定哪个计时器正在引发滴答声事件 下面是我正在使用的示例代码: Timer[] timers = new Timer[Wavcount]; for (int i=0;i<Wavcount;i++) { Timer t1 = new Timer(); t1.Interval = 1000; t1.Elapsed += new ElapsedEventHandler(S

我在web应用程序中工作,我需要根据数据库中记录的数量动态创建计时器。我能够做到这一点,但问题是我无法确定哪个计时器正在引发滴答声事件

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

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;
}
Timer[]timers=新定时器[Wavcount];
对于(int i=0;i因此,您需要为每个计时器指定一些名称。由于计时器本身没有任何可使用的内容,您可以通过将调用包装到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);
}
Timer[]timers=新定时器[Wavcount];
对于(int i=0;iSomeStaticMethod(s作为计时器,e.SignalTime,“计时器”+i);
t1.Start();
}
私有静态void SomeStaticMethod(计时器、日期时间信号时间、字符串时间名称)
{
控制台写入线(timerName+“在”+信号时间触发);
}

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

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

private void PollSource(object stateInfo)
{
}

在“PollSource”中,您的数据将作为“stateInfo”获取,在我的例子中,视图模型包含回调中所需的所有信息。

您不能的意思是什么?您刚刚做了:
Timer t1=(Timer)sender
在t1对象中检查它