public void RaiseEvent(object sender, TEventArgs e) { var handlers = new List <EventHandler <TEventArgs> >(weakReferences.Count); lock (weakReferences) { weakReferences.Clear(true); handlers.AddRange(weakReferences.Where(handler => handler != null)); } foreach (var eventHandler in handlers) { eventHandler.Invoke(sender, e); } }