C# 动态创建计时器,并确定引发滴答事件的计时器
我在web应用程序中工作,我需要根据数据库中记录的数量动态创建计时器。我能够做到这一点,但问题是我无法确定哪个计时器正在引发滴答声事件 下面是我正在使用的示例代码: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
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对象中检查它