1

System.Timers.Timer クラスのデフォルトの Elapsed イベントをオーバーライドして、必要に応じてすべてのイベント リスナーを簡単に削除できるようにしたいと考えています。この質問からのホルヘの答えを使用して、次のことを思いつきました

       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