如何正确覆盖 System.Timers.Timer Elapsed 事件

How to correctly override System.Timers.Timer Elapsed Event

我想覆盖 System.Timers.Timer class 的默认 Elapsed 事件,以便能够在需要时轻松删除所有事件侦听器。使用 Jorge 在 this 问题中的回答,我想出了以下

       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 成员。但是我看不到事件处理程序实际执行。我设置正确了吗?

我是这样做的:

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

然后只使用AddElapsed()而不是Elapsed +=

也许还添加以下内容:

[Obsolete]
public new event ElapsedEventHandler Elapsed;