簡體   English   中英

如何動態設置system.timer的名稱

[英]how do I set the name of a system.timer dynamically

我必須動態創建幾個計時器,但是當它們觸發時我需要它們的名稱。

這是我的代碼:

      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上得到一個null異常。

如何設置我正在創建的計時器的名稱?

編輯

我正在創建這個,因為我需要知道什么計時器在到達已用事件時觸發。 一旦它發射,我必須知道要顯示的消息。

我可以使用計時器傳遞消息並根據它是什么計時器顯示消息嗎?

這是我的其余代碼:

  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類並添加您自己的名稱字段。

這是一個例子:

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);
      }
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM