示例#1
0
        public System.IntPtr AddReference(Internal.ConsumerBase consumer)
        {
            if (consumer == null)
            {
                return(System.IntPtr.Zero);
            }

            Reference reference;

            m_consumerTableLock.AcquireReaderLock(System.Threading.Timeout.Infinite);
            try
            {
                if (!m_consumerTable.TryGetValue(consumer, out reference))
                {
                    System.Threading.LockCookie lockCookie = m_consumerTableLock.UpgradeToWriterLock(System.Threading.Timeout.Infinite);
                    try
                    {
                        reference = new Reference(GCHandle.Alloc(consumer));
                        m_consumerTable.Add(consumer, reference);
                    }
                    finally
                    {
                        m_consumerTableLock.DowngradeFromWriterLock(ref lockCookie);
                    }
                }
                System.Threading.Interlocked.Increment(ref reference.references);
            }
            finally
            {
                m_consumerTableLock.ReleaseReaderLock();
            }
            return(GCHandle.ToIntPtr(reference.handle));
        }
示例#2
0
        public void DelayClose(PopupItem item)
        {
            if (m_Timer == null)
                return;

            bool readerLockHeld = m_PopupsLock.IsReaderLockHeld;
            System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
            if (readerLockHeld)
            {
                cookie1 = m_PopupsLock.UpgradeToWriterLock(-1);
            }
            else
            {
                m_PopupsLock.AcquireWriterLock(-1);
            }

            try
            {
                m_Popups.Add(item);
                m_Timer.Start();
            }
            finally
            {
                if (readerLockHeld)
                {
                    m_PopupsLock.DowngradeFromWriterLock(ref cookie1);
                }
                else
                {
                    m_PopupsLock.ReleaseWriterLock();
                }
            }
        }
示例#3
0
        private void CloseAllPopups()
        {
            if (m_Popups.Count > 0)
            {
                bool readerLockHeld = m_PopupsLock.IsReaderLockHeld;
                System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
                if (readerLockHeld)
                {
                    cookie1 = m_PopupsLock.UpgradeToWriterLock(-1);
                }
                else
                {
                    m_PopupsLock.AcquireWriterLock(-1);
                }

                try
                {
                    foreach (PopupItem item in m_Popups)
                        item.ClosePopup();
                    m_Popups.Clear();
                }
                finally
                {
                    if (readerLockHeld)
                    {
                        m_PopupsLock.DowngradeFromWriterLock(ref cookie1);
                    }
                    else
                    {
                        m_PopupsLock.ReleaseWriterLock();
                    }
                }
            }
        }
示例#4
0
 public void DowngradeToReaderLock()
 {
     System.Diagnostics.Debug.Assert(type == LockType.ForWriting);
     if (type == LockType.ForWriting)
     {
         System.Threading.LockCookie c = cookie.Value;
         rwlock.DowngradeFromWriterLock(ref c);
         cookie = null;
         type   = LockType.ForReading;
     }
 }
示例#5
0
        public void Start()
        {
            m_FadeImageLock.AcquireReaderLock(-1);
            try
            {
                if (m_IsActive)
                    return;
            }
            finally
            {
                m_FadeImageLock.ReleaseReaderLock();
            }

            bool readerLockHeld = m_FadeImageLock.IsReaderLockHeld;
            System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
            if (readerLockHeld)
            {
                cookie1 = m_FadeImageLock.UpgradeToWriterLock(-1);
            }
            else
            {
                m_FadeImageLock.AcquireWriterLock(-1);
            }

            try
            {
                m_IsActive = true;
                m_RecordStartStateHandler.Invoke(this, new EventArgs());
            }
            finally
            {
                if (readerLockHeld)
                {
                    m_FadeImageLock.DowngradeFromWriterLock(ref cookie1);
                }
                else
                {
                    m_FadeImageLock.ReleaseWriterLock();
                }
            }

            FadeAnimator.Fade(this, new EventHandler(this.OnFadeChanged));
            m_IsActive = true;
        }
示例#6
0
        /* Function: ClearTranslations
         * Clears the loaded translations.  New ones will be loaded the next time they are accessed.
         */
        private static void ClearTranslations()
        {
            bool hadWriterLock = accessLock.IsWriterLockHeld;
            bool hadReaderLock = accessLock.IsReaderLockHeld;

            System.Threading.LockCookie lockCookie = default(System.Threading.LockCookie);

            if (!hadWriterLock)
            {
                if (hadReaderLock)
                {
                    lockCookie = accessLock.UpgradeToWriterLock(-1);
                }
                else
                {
                    accessLock.AcquireWriterLock(-1);
                }
            }

            try
            {
                translations.Clear();
            }
            finally
            {
                if (!hadWriterLock)
                {
                    if (hadReaderLock)
                    {
                        accessLock.DowngradeFromWriterLock(ref lockCookie);
                    }
                    else
                    {
                        accessLock.ReleaseWriterLock();
                    }
                }
            }
        }
示例#7
0
 public bool Equals(System.Threading.LockCookie obj)
 {
     throw null;
 }
示例#8
0
		private void DisposeFadeImage()
		{
			bool readerLockHeld = m_FadeImageLock.IsReaderLockHeld;
			System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
			
			if (readerLockHeld)
			{
				cookie1 = m_FadeImageLock.UpgradeToWriterLock(-1);
			}
			else
			{
				m_FadeImageLock.AcquireWriterLock(-1);
			}

			try
			{
				m_FadeImageState.Dispose();
				m_FadeImageState=null;
			}
			finally
			{
				if (readerLockHeld)
				{
					m_FadeImageLock.DowngradeFromWriterLock(ref cookie1);
				}
				else
				{
					m_FadeImageLock.ReleaseWriterLock();
				}
			}
		}
示例#9
0
		private void SetMouseOver(bool value)
		{
			if (value != m_MouseOver)
			{
				bool fadeEnabled = IsFadeEnabled && this.Enabled && this.Visible && this.Width>0 && this.Height>0;
				if (fadeEnabled)
				{
					bool createImage=false;
                    bool erroredOut = false;
                    try
                    {
                        m_FadeImageLock.AcquireReaderLock(-1);
                        try
                        {
                            createImage = (m_FadeImageState == null);
                        }
                        finally
                        {
                            m_FadeImageLock.ReleaseReaderLock();
                        }

                        if (createImage)
                        {
                            m_MouseOver = true;

                            bool readerLockHeld = m_FadeImageLock.IsReaderLockHeld;
                            System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
                            if (readerLockHeld)
                            {
                                cookie1 = m_FadeImageLock.UpgradeToWriterLock(-1);
                            }
                            else
                            {
                                m_FadeImageLock.AcquireWriterLock(-1);
                            }

                            try
                            {
                                m_FadeImageState = GetCurrentStateImage();
                            }
                            finally
                            {
                                if (readerLockHeld)
                                {
                                    m_FadeImageLock.DowngradeFromWriterLock(ref cookie1);
                                }
                                else
                                {
                                    m_FadeImageLock.ReleaseWriterLock();
                                }
                            }
                        }
                    }
                    catch (ApplicationException)
                    {
                        erroredOut = true;
                    }
                    
					m_FadeDirection = 1;
                    
					m_MouseOver = value;

                    if (!erroredOut)
                    {
                        if (!m_MouseOver)
                            m_FadeDirection = -1;
                        else
                            m_FadeAlpha = 10;

                        FadeAnimator.Fade(this, new EventHandler(this.OnFadeChanged));
                        m_FadeAnimation = true;
                    }
				}
				else
					m_MouseOver = value;
			}
		}
示例#10
0
 public bool Equals(System.Threading.LockCookie obj)
 {
     return(default(bool));
 }
示例#11
0
        public void EraseDelayClose()
        {
            bool readerLockHeld = m_PopupsLock.IsReaderLockHeld;
            System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
            if (readerLockHeld)
            {
                cookie1 = m_PopupsLock.UpgradeToWriterLock(-1);
            }
            else
            {
                m_PopupsLock.AcquireWriterLock(-1);
            }

            try
            {
                m_Popups.Clear();
            }
            finally
            {
                if (readerLockHeld)
                {
                    m_PopupsLock.DowngradeFromWriterLock(ref cookie1);
                }
                else
                {
                    m_PopupsLock.ReleaseWriterLock();
                }
            }
        }
示例#12
0
        public void Stop()
        {
            m_FadeImageLock.AcquireReaderLock(-1);
            try
            {
                if (!m_IsActive)
                    return;
            }
            finally
            {
                m_FadeImageLock.ReleaseReaderLock();
            }
            FadeAnimator.StopFade(this, new EventHandler(OnFadeChanged));

            bool readerLockHeld = m_FadeImageLock.IsReaderLockHeld;
            System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();

            if (readerLockHeld)
            {
                cookie1 = m_FadeImageLock.UpgradeToWriterLock(-1);
            }
            else
            {
                m_FadeImageLock.AcquireWriterLock(-1);
            }

            try
            {
                m_IsActive = false;
                m_CleanupHandler.Invoke(this, new EventArgs());
            }
            finally
            {
                if (readerLockHeld)
                {
                    m_FadeImageLock.DowngradeFromWriterLock(ref cookie1);
                }
                else
                {
                    m_FadeImageLock.ReleaseWriterLock();
                }
            }
        }
示例#13
0
        private void StartFade(int direction, int initialAlpha)
        {
            bool createImage = false;
            m_FadeImageLock.AcquireReaderLock(-1);
            try
            {
                createImage = (m_ImageState2 == null);
            }
            finally
            {
                m_FadeImageLock.ReleaseReaderLock();
            }

            if (createImage)
            {
                bool oldMouseOver = m_MouseOver;
                m_MouseOver = true;
                try
                {
                    bool readerLockHeld = m_FadeImageLock.IsReaderLockHeld;
                    System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
                    if (readerLockHeld)
                    {
                        cookie1 = m_FadeImageLock.UpgradeToWriterLock(-1);
                    }
                    else
                    {
                        m_FadeImageLock.AcquireWriterLock(-1);
                    }

                    try
                    {
                        m_ImageState2 = GetCurrentStateImage();
                    }
                    finally
                    {
                        if (readerLockHeld)
                        {
                            m_FadeImageLock.DowngradeFromWriterLock(ref cookie1);
                        }
                        else
                        {
                            m_FadeImageLock.ReleaseWriterLock();
                        }
                    }
                }
                finally
                {
                    m_MouseOver = oldMouseOver;
                }
            }

            m_Direction = direction;
            m_Alpha = initialAlpha;

            FadeAnimator.Fade(this, new EventHandler(this.OnFadeChanged));
            m_FadeAnimation = true;
        }
示例#14
0
 public void DowngradeFromWriterLock(ref System.Threading.LockCookie lockCookie)
 {
 }
示例#15
0
        /* Function: Load
         *
         * Loads the translation file for the specified module and locale and enters it into <translations>.  If it
         * doesn't exist it will create an entry anyway with an empty table, except for the default locale in which case
         * it will throw an exception.
         *
         * Parameters:
         *
         *		module - The module string to load.
         *		locale - The locale string to load, such as "en-us".
         */
        private static void Load(string module, string localeCode)
        {
            bool hadWriterLock = accessLock.IsWriterLockHeld;
            bool hadReaderLock = accessLock.IsReaderLockHeld;

            System.Threading.LockCookie lockCookie = default(System.Threading.LockCookie);

            if (!hadWriterLock)
            {
                if (hadReaderLock)
                {
                    lockCookie = accessLock.UpgradeToWriterLock(-1);
                }
                else
                {
                    accessLock.AcquireWriterLock(-1);
                }
            }

            try
            {
                string moduleLocaleString = module + '.' + localeCode;

                // Check to see if it's already loaded when we get the writer lock.  It's possible another thread got it
                // first and already loaded this file.
                if (translations.ContainsKey(moduleLocaleString))
                {
                    return;
                }

                bool foundTranslationFile = false;
                Path translationFileName  = null;

                foreach (Path translationFolder in translationFolders)
                {
                    translationFileName = translationFolder + '/' + moduleLocaleString + ".txt";

                    if (System.IO.File.Exists(translationFileName))
                    {
                        foundTranslationFile = true;
                        break;
                    }
                }

                if (foundTranslationFile)
                {
                    translations[moduleLocaleString] = Load(translationFileName);
                }
                else
                {
                    if (localeCode == "default")
                    {
                        throw new Exceptions.UserFriendly("Could not find translation file " + moduleLocaleString + ".txt.");
                    }
                    else
                    {
                        translations[moduleLocaleString] = new Collections.StringToStringTable(KeySettingsForIdentifiers);
                    }
                }
            }

            finally
            {
                if (!hadWriterLock)
                {
                    if (hadReaderLock)
                    {
                        accessLock.DowngradeFromWriterLock(ref lockCookie);
                    }
                    else
                    {
                        accessLock.ReleaseWriterLock();
                    }
                }
            }
        }
示例#16
0
 public void RestoreLock(ref System.Threading.LockCookie lockCookie)
 {
 }
示例#17
0
 internal WriterLockUpgraded(System.Threading.ReaderWriterLock rwlock, int milliSeconds)
 {
     this.cookie = rwlock.UpgradeToWriterLock(milliSeconds);
     this.rwlock = rwlock;
 }