Как получить индекс списка списка объектов Timer в обработчике событий Timer - PullRequest
0 голосов
/ 18 мая 2018

Мое приложение требует 22 отдельных таймера.Поэтому я создал список таймеров следующим образом.

List<Timer> myTimers = new List<Timer>();

for(int i = 0; i < 22; i++)
{
  myTimers.Add(new Timer());
}

Затем я установил настройки для таймеров

foreach(var timer in myTimers)
{
  timer.Elapsed += new ElapsedEventHandler(ElapsedTimerEventHandler);
  timer.Interval = 10000;
  timer.Enabled = false;
}

Затем я создал метод запуска таймера.

public void SetTimerMethod(int timerId)
{
  var timer = myTimers.ElementAt(timerId);
  timer.Enabled = true;
}

Мой вопрос в моем обработчике событий: как мне узнать, какой таймер вызвал обработчик событий?Я пытался использовать indexOf (myTimers);в исходном объекте, переданном в обработчик событий, но это не работает.Причина, по которой мне нужна позиция индекса, заключается в том, что мне нужно обновить поле в списке объектов класса, основываясь на том, какой таймер истек.Буду признателен за любую помощь.

Я новичок в этом, поэтому я готов сделать это по-другому, если это плохой способ делать то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Если вы действительно хотите индекс, а не только таймер, вы можете использовать IndexOf

private ElapsedEventHandler(object sender, ElapsedEventArgs e)
{
    var index = myTimers.IndexOf((Timer)sender);
}
0 голосов
/ 18 мая 2018

Если каждый таймер имеет одинаковый интервал и запускается в одно и то же время, какой смысл иметь их много против одного?В любом случае, свойство sender события Elapsed является таймером источника (см. Также документы :

private void ElapsedTimerEventHandler(Object source, System.Timers.ElapsedEventArgs e)
{
   var timerCausingThisEvent = (Timer)source;  // source is the timer
   var timerInList = myTimers.First(t => t == timerCausingThisEvent);
   var index = myTimers.IndexOf(timerCausingThisEvent);
}
...