1

I want to override the default Elapsed event for the System.Timers.Timer class to easily be able to remove all event listeners when desired. Using Jorge's answer from this question, I came up with the following

       class CustomTimer : System.Timers.Timer {

            List<ElapsedEventHandler> delegates = new List<ElapsedEventHandler>();

            private new event ElapsedEventHandler _elapsed;

            public new event ElapsedEventHandler Elapsed {
                add {
                    _elapsed += value;
                    delegates.Add(value);
                }
                remove {
                    _elapsed -= value;
                    delegates.Remove(value);
                }
            }

            public void RemoveAllEvents() {
                foreach (ElapsedEventHandler e in delegates) {
                    _elapsed -= e;
                }
                delegates.Clear();
            }
        }

When I run the service that this is executing in, I can trace through to see that the private Elapsed member is being assigned. However I'm not able to see the event handler actually execute. Did I set this up correctly?

pingOfDoom
  • 408
  • 1
  • 4
  • 21

1 Answers1

1

This is how i did it :

public void AddElapsed(ElapsedEventHandler newHandler)
{
    base.Elapsed += newHandler;
    delegates.Add(newHandler);
}

Then only use AddElapsed() instead of Elapsed +=

Maybe add the following as well:

[Obsolete]
public new event ElapsedEventHandler Elapsed;
Charles
  • 2,721
  • 1
  • 9
  • 15