static void Main(string[] args)
        {
            Timer t = new Timer
            {
                Interval = TimeSpan.FromMilliseconds(500)
            };

            // 4 a.
            t.Expired += OntimerExpired;

            // 4 b.
            // da anonyme methode -> kann nicht mehr dereferenziert werden
            //t.Expired +=
            //   signaledTime => Console.WriteLine($"Timer expired at {signaledTime:HH:mm:ss:ff} ");

            // 4 c.
            // workaround
            ExpiredEventHandler handler = signaledTime => Console.WriteLine($"Timer expired at {signaledTime:HH:mm:ss:ff} ");

            t.Expired += handler;

            t.Start();
            Console.ReadLine();

            // statische Methode deshalb wäre es egal mit Memory Leaks
            // Expired hat eine Referenz gespeichert, deshalb wird es vom GC nicht freigegeben
            // 5 a.
            // t.Expired -= OntimerExpired;

            // 5 b.
            // unmöglich zu dereferenzieren

            // 5 c.
            t.Expired -= handler;
        }
Exemple #2
0
        private static DateTime ExpireFromDictionary(IDictionary <TKey, TValue> dict, TimeSpan maxAge,
                                                     DateTime latestTime, ExpiredEventHandler handler)
        {
            var oldestUnexpired = DateTime.MaxValue;

            var removeList = new List <TKey>();

            foreach (var kvp in dict)
            {
                if (latestTime - kvp.Value.LastModified > maxAge)
                {
                    removeList.Add(kvp.Key);
                    handler(kvp.Value);
                }
                else if (oldestUnexpired > kvp.Value.LastModified)
                {
                    oldestUnexpired = kvp.Value.LastModified;
                }
            }
            foreach (var key in removeList)
            {
                dict.Remove(key);
            }

            return(oldestUnexpired);
        }
Exemple #3
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="maximumIncompleteRecordAge">
        /// Maximum age for incomplete records before expiration. Must be non-zero. Negative values are converted to
        /// positive values.
        /// </param>
        /// <param name="maximumCompleteRecordAge">
        /// Maximum age for complete records before expiration. Must be non-zero. Negative values are converted to
        /// positive values.
        /// </param>
        /// <param name="incompleteExpiredEventHandler">Method to handle expired incomplete records. Must not be null</param>
        /// <param name="completeExpiredEventHandler">Method to handle expired complete records. Must not be null</param>
        public ExpiringCompositeEventCollection(TimeSpan maximumIncompleteRecordAge, TimeSpan maximumCompleteRecordAge,
                                                ExpiredEventHandler incompleteExpiredEventHandler,
                                                ExpiredEventHandler completeExpiredEventHandler)
        {
            if (maximumIncompleteRecordAge == TimeSpan.Zero)
            {
                throw new ArgumentException("Timespan must be non-zero", "maximumIncompleteRecordAge");
            }

            if (maximumCompleteRecordAge == TimeSpan.Zero)
            {
                throw new ArgumentException("Timespan must be non-zero", "maximumCompleteRecordAge");
            }

            if (incompleteExpiredEventHandler == null)
            {
                throw new ArgumentNullException("incompleteExpiredEventHandler");
            }

            if (completeExpiredEventHandler == null)
            {
                throw new ArgumentNullException("completeExpiredEventHandler");
            }

            this.maxIncompleteAge = maximumIncompleteRecordAge.Duration();
            this.maxCompleteAge   = maximumCompleteRecordAge.Duration();
            this.incompleteExpiredEventHandler = incompleteExpiredEventHandler;
            this.completeExpiredEventHandler   = completeExpiredEventHandler;
        }
Exemple #4
0
        static void Main(string[] args)
        {
            Timer timer = new Timer
            {
                Interval = 0_500
            };

            ExpiredEventHandler expiredEvent = dateTime => Console.WriteLine($"Timer elapsed on {dateTime:HH:mm:ss.fff}");

            timer.Expired += expiredEvent;
            timer.Expired += expiredEvent;

            timer.Expired -= expiredEvent;

            //timer.Expired += Timer_Expired;

            timer.Start();
        }