如何设置系统的名称.动态计时器

本文关键字:动态 计时器 系统 何设置 设置 | 更新日期: 2023-09-27 18:09:36

我必须动态创建几个计时器,但我需要它们的名称,当它们启动

下面是我的代码:
      timersDict = new Dictionary<string, System.Timers.Timer>();
      int i = 0;
      foreach (var msg in _messages.CurrentMessages)
      {
          var timer = new System.Timers.Timer();
          timer.Interval = int.Parse(msg.Seconds);
          timer.Elapsed += Main_Tick;
          timer.Site.Name = i.ToString();
          i++;
      }

我想我可以从timer.Site.Name设置它,但是我在Site上得到一个空异常。

如何设置创建的定时器的名称?

编辑

我正在创建这个,因为我需要知道什么定时器是触发时,它得到了经过的事件。我必须知道什么消息显示一旦它触发。

我可以通过定时器传递消息,并根据它是什么定时器显示消息吗?

下面是我剩下的代码:
  void Main_Tick(object sender, EventArgs e)
  {
      var index = int.Parse(((System.Timers.Timer)sender).Site.Name);
      SubmitInput(_messages.CurrentMessages[index].MessageString);
  }

我将使用它的名称来告诉我它是哪个计时器,这样我就知道要显示什么消息,因为所有的计时器都是动态创建的

如何设置系统的名称.动态计时器

我建议包装System.Timers.Timer类,并添加您自己的name字段。

下面是一个例子:

using System;
using System.Collections.Generic;
using System.Threading;
namespace StackOverFlowConsole3
{
   public class NamedTimer : System.Timers.Timer
   {
      public readonly string name;
      public NamedTimer(string name)
      {
         this.name = name;
      }
   }
   class Program
   {
      static void Main()
      {
         for (int i = 1; i <= 10; i++)
         {
            var timer = new NamedTimer(i.ToString());
            timer.Interval = i * 1000;
            timer.Elapsed += Main_Tick;
            timer.AutoReset = false;
            timer.Start();
         }
         Thread.Sleep(11000);
      }
      static void Main_Tick(object sender, EventArgs args)
      {
         NamedTimer timer = sender as NamedTimer;
         Console.WriteLine(timer.name);
      }
   }
}