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)); }
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(); } } }
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(); } } } }
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; } }
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; }
/* 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(); } } } }
public bool Equals(System.Threading.LockCookie obj) { throw null; }
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(); } } }
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; } }
public bool Equals(System.Threading.LockCookie obj) { return(default(bool)); }
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(); } } }
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(); } } }
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; }
public void DowngradeFromWriterLock(ref System.Threading.LockCookie lockCookie) { }
/* 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(); } } } }
public void RestoreLock(ref System.Threading.LockCookie lockCookie) { }
internal WriterLockUpgraded(System.Threading.ReaderWriterLock rwlock, int milliSeconds) { this.cookie = rwlock.UpgradeToWriterLock(milliSeconds); this.rwlock = rwlock; }