Пример #1
0
        internal static void UnregisterAmbientManager(StyleManagerAmbient ambientProvider)
        {
            LockCookie cookie1 = new LockCookie();
            bool readerLockHeld = StyleManager._ReadWriteAmbientListLock.IsReaderLockHeld;
            if (readerLockHeld)
            {
                cookie1 = StyleManager._ReadWriteAmbientListLock.UpgradeToWriterLock(-1);
            }
            else
            {
                StyleManager._ReadWriteAmbientListLock.AcquireWriterLock(-1);
            }
            try
            {

                foreach (WeakReference item in _RegisteredAmbients)
                {
                    object target = item.Target;
                    if (target != null && target.Equals(ambientProvider))
                    {
                        _RegisteredControls.Remove(item);
                        break;
                    }
                }
            }
            finally
            {
                if (readerLockHeld)
                {
                    StyleManager._ReadWriteAmbientListLock.DowngradeFromWriterLock(ref cookie1);
                }
                else
                {
                    StyleManager._ReadWriteAmbientListLock.ReleaseWriterLock();
                }
            }
        }
Пример #2
0
        private static WeakReference GetAmbientReference(StyleManagerAmbient ambientProvider)
        {
            ArrayList registeredAmbients = _RegisteredAmbients;
            if (registeredAmbients == null) return null;

            StyleManager._ReadWriteAmbientListLock.AcquireReaderLock(-1);
            try
            {
                foreach (WeakReference item in registeredAmbients)
                {
                    object target = item.Target;
                    if (target != null && target.Equals(ambientProvider))
                        return item;
                }
            }
            finally
            {
                StyleManager._ReadWriteAmbientListLock.ReleaseReaderLock();
            }
            return null;
        }
Пример #3
0
        internal static void RegisterAmbientManager(StyleManagerAmbient ambientProvider)
        {
            if (GetAmbientReference(ambientProvider) == null)
            {
                WeakReference reference = new WeakReference(ambientProvider);

                LockCookie cookie1 = new LockCookie();
                bool readerLockHeld = StyleManager._ReadWriteAmbientListLock.IsReaderLockHeld;
                if (readerLockHeld)
                {
                    cookie1 = StyleManager._ReadWriteAmbientListLock.UpgradeToWriterLock(-1);
                }
                else
                {
                    StyleManager._ReadWriteAmbientListLock.AcquireWriterLock(-1);
                }
                try
                {
                    _RegisteredAmbients.Add(reference);
                }
                finally
                {
                    if (readerLockHeld)
                    {
                        StyleManager._ReadWriteAmbientListLock.DowngradeFromWriterLock(ref cookie1);
                    }
                    else
                    {
                        StyleManager._ReadWriteAmbientListLock.ReleaseWriterLock();
                    }
                }
                ambientProvider = null;
            }
        }