Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / Utility / MonitorWrapper.cs / 1 / MonitorWrapper.cs
//---------------------------------------------------------------------------- // //// Copyright (C) 2005 by Microsoft Corporation. All rights reserved. // // // // Description: Wraps System.Threading.Monitor and adds a busy flag // //--------------------------------------------------------------------------- using System; using System.Threading; using System.Windows; using MS.Internal; namespace MS.Internal.Utility { ////// Monitor with Busy flag while it is entered. /// internal class MonitorWrapper { public IDisposable Enter() { Monitor.Enter(_syncRoot); Interlocked.Increment(ref _enterCount); return new MonitorHelper(this); } public void Exit() { int count = Interlocked.Decrement(ref _enterCount); Invariant.Assert(count >= 0, "unmatched call to MonitorWrapper.Exit"); Monitor.Exit(_syncRoot); } public bool Busy { get { return (_enterCount > 0); } } int _enterCount; object _syncRoot = new object(); private class MonitorHelper : IDisposable { public MonitorHelper(MonitorWrapper monitorWrapper) { _monitorWrapper = monitorWrapper; } public void Dispose() { if (_monitorWrapper != null) { _monitorWrapper.Exit(); _monitorWrapper = null; } } private MonitorWrapper _monitorWrapper; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) 2005 by Microsoft Corporation. All rights reserved. // // // // Description: Wraps System.Threading.Monitor and adds a busy flag // //--------------------------------------------------------------------------- using System; using System.Threading; using System.Windows; using MS.Internal; namespace MS.Internal.Utility { ////// Monitor with Busy flag while it is entered. /// internal class MonitorWrapper { public IDisposable Enter() { Monitor.Enter(_syncRoot); Interlocked.Increment(ref _enterCount); return new MonitorHelper(this); } public void Exit() { int count = Interlocked.Decrement(ref _enterCount); Invariant.Assert(count >= 0, "unmatched call to MonitorWrapper.Exit"); Monitor.Exit(_syncRoot); } public bool Busy { get { return (_enterCount > 0); } } int _enterCount; object _syncRoot = new object(); private class MonitorHelper : IDisposable { public MonitorHelper(MonitorWrapper monitorWrapper) { _monitorWrapper = monitorWrapper; } public void Dispose() { if (_monitorWrapper != null) { _monitorWrapper.Exit(); _monitorWrapper = null; } } private MonitorWrapper _monitorWrapper; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LayoutUtils.cs
- DataRow.cs
- XmlDataCollection.cs
- StoryFragments.cs
- Pick.cs
- XmlValidatingReaderImpl.cs
- securitymgrsite.cs
- CqlErrorHelper.cs
- PrintPageEvent.cs
- ReadOnlyHierarchicalDataSource.cs
- xmlglyphRunInfo.cs
- graph.cs
- IdentityValidationException.cs
- ScriptingRoleServiceSection.cs
- SmtpFailedRecipientsException.cs
- ContainerControl.cs
- EventToken.cs
- TableLayoutColumnStyleCollection.cs
- Expr.cs
- TextHidden.cs
- DatagramAdapter.cs
- PolicyException.cs
- PropertyEntry.cs
- TreeViewImageIndexConverter.cs
- DesignerWebPartChrome.cs
- DesignerEventService.cs
- ControlBindingsCollection.cs
- RandomNumberGenerator.cs
- ToolStripItemTextRenderEventArgs.cs
- ListViewDeletedEventArgs.cs
- SafeFileHandle.cs
- AttachedPropertyDescriptor.cs
- _OverlappedAsyncResult.cs
- odbcmetadatafactory.cs
- HtmlTernaryTree.cs
- SpoolingTaskBase.cs
- RefType.cs
- CultureInfoConverter.cs
- DataControlLinkButton.cs
- ListManagerBindingsCollection.cs
- PriorityQueue.cs
- DataErrorValidationRule.cs
- ToolStripDropDown.cs
- XmlUtf8RawTextWriter.cs
- TypeGeneratedEventArgs.cs
- Assembly.cs
- HtmlInputHidden.cs
- VirtualDirectoryMapping.cs
- ErrorHandler.cs
- SoapExtensionImporter.cs
- ReturnValue.cs
- TypeConstant.cs
- DataControlReference.cs
- Pkcs7Recipient.cs
- PowerStatus.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- XmlIlGenerator.cs
- DirectoryObjectSecurity.cs
- Solver.cs
- Binding.cs
- EntityDataSourceChangedEventArgs.cs
- SqlClientFactory.cs
- LocatorManager.cs
- GenericEnumerator.cs
- DomainUpDown.cs
- DataGridItem.cs
- SafeReversePInvokeHandle.cs
- HttpCapabilitiesBase.cs
- Win32Exception.cs
- InputScopeConverter.cs
- DataBoundControlAdapter.cs
- MoveSizeWinEventHandler.cs
- DrawingCollection.cs
- ExpressionDumper.cs
- SystemColors.cs
- TypeConstant.cs
- StringInfo.cs
- Win32SafeHandles.cs
- MimeMapping.cs
- METAHEADER.cs
- RadioButtonDesigner.cs
- KeyGestureValueSerializer.cs
- ContentDisposition.cs
- ReaderOutput.cs
- Tuple.cs
- TrackingLocationCollection.cs
- SelectionProviderWrapper.cs
- StandardBindingElement.cs
- HtmlImage.cs
- DataGridViewColumnStateChangedEventArgs.cs
- LinkClickEvent.cs
- HyperLinkStyle.cs
- IsolatedStoragePermission.cs
- AccessedThroughPropertyAttribute.cs
- CapabilitiesSection.cs
- ListenerElementsCollection.cs
- WinInet.cs
- FieldNameLookup.cs
- FreezableOperations.cs
- PagesSection.cs