public static void Test() { AlarmSource alarmSource = new AlarmSource(); AlarmConsumer alarmConsumer1 = new AlarmConsumer(1); AlarmConsumer alarmConsumer2 = new AlarmConsumer(2); AlarmEventWeakEventManager.AddHandler(alarmSource, alarmConsumer1.Listener); AlarmEventWeakEventManager.AddHandler(alarmSource, alarmConsumer2.Listener); alarmSource.RaiseAlarm(); // the weak connection: the alarm consumer can be deleted // and discarded by GC without removing the listener form the source. // Alarm source still stays alive. alarmConsumer1 = null; Assert.IsNull(alarmConsumer1); GC.Collect(); alarmSource.RaiseAlarm(); }
/// <summary> /// Stop listening to the given source for the event. /// </summary> protected override void StopListening(object source) { AlarmSource typedSource = (AlarmSource)source; typedSource.OnAlarmRaised -= OnAlarmEvent; }