如何正确覆盖 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;
我想覆盖 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;