Как правильно переопределить событие System.Timers.Timer Elapsed - PullRequest
1 голос
/ 09 января 2020

Я хочу переопределить событие Elapsed по умолчанию для класса System.Timers.Timer, чтобы при необходимости можно было легко удалить все прослушиватели событий. Используя ответ Хорхе из этого вопроса, я получил следующий

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

Когда я запускаю службу, в которой он выполняется, я могу проследить, чтобы увидеть, что частный член Elapsed назначается. Однако я не могу увидеть обработчик события на самом деле. Я правильно настроил?

1 Ответ

1 голос
/ 09 января 2020

Вот как я это сделал:

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

Тогда используйте только AddElapsed() вместо Elapsed +=

Возможно также добавьте следующее:

[Obsolete]
public new event ElapsedEventHandler Elapsed;
...