1

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

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

4

1 回答 1

1

我就是这样做的:

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

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

也许还添加以下内容:

[Obsolete]
public new event ElapsedEventHandler Elapsed;
于 2020-01-09T20:15:30.577 回答