C # WinForm Timers - уведомить родительский класс, что событие таймера было инициировано - PullRequest
0 голосов
/ 19 сентября 2010

У меня есть родительский класс, который содержит массив объектов, каждый из которых связан с таймером.

Я хочу, чтобы родительский класс мог запускать и останавливать эти таймеры, и, что наиболее важно, хочу, чтобы родительский классчтобы определить, какой из дочерних объектов «истекший таймер» даже был поднят.

Возможно ли это, и если да, то каков наилучший способ сделать это?

1 Ответ

1 голос
/ 19 сентября 2010

Я бы посоветовал вам дать дочерним объектам событие, которое может быть вызвано при срабатывании таймера.Затем класс Parent может прикрепить обработчик к событию от каждого дочернего элемента.

Вот некоторый псевдокод, чтобы дать вам представление о том, что я имею в виду.Я специально не показывал код WinForms или Threading, потому что вы не даете подробностей в этой области.

class Parent
{
  List<Child> _children = new List<Child>();

  public Parent()
  {
    _children.Add(new Child());
    _children.Add(new Child());
    _children.Add(new Child());

    // Add handler to the child event
    foreach (Child child in _children)
    {
      child.TimerFired += Child_TimerFired;
    }
  }

  private void Child_TimerFired(object sender, EventArgs e)
  {
    // One of the child timers fired
    // sender is a reference to the child that fired the event
  }
}

class Child
{
  public event EventHandler TimerFired;

  protected void OnTimerFired(EventArgs e)
  {      
    if (TimerFired != null)
    {
      TimerFired(this, e);
    }
  }

  // This is the event that is fired by your current timer mechanism
  private void HandleTimerTick(...)
  {
    OnTimerFired(EventArgs.Empty);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...