我在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;
}
答案 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);
}