示例#1
0
        /// <summary>
        /// Use in place of CollectionChanged Adder
        /// </summary>
        /// <param name="objTag">Tag to associate with added delegate</param>
        /// <param name="funcDelegateToAdd">Delegate to add to CollectionChanged</param>
        /// <returns>True if delegate was successfully added, false if a delegate already exists with the associated tag.</returns>
        public async ValueTask <bool> AddTaggedCollectionChangedAsync(object objTag, NotifyCollectionChangedEventHandler funcDelegateToAdd)
        {
            IAsyncDisposable objLocker = await LockObject.EnterWriteLockAsync();

            try
            {
                (bool blnSuccess, HashSet <NotifyCollectionChangedEventHandler> setFuncs)
                    = await _dicTaggedAddedDelegates.TryGetValueAsync(objTag);

                if (!blnSuccess)
                {
                    setFuncs = new HashSet <NotifyCollectionChangedEventHandler>();
                    await _dicTaggedAddedDelegates.AddAsync(objTag, setFuncs);
                }

                if (setFuncs.Add(funcDelegateToAdd))
                {
                    base.CollectionChanged += funcDelegateToAdd;
                    return(true);
                }
            }
            finally
            {
                await objLocker.DisposeAsync();
            }
            Utils.BreakIfDebug();
            return(false);
        }