Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Utility / MonitorWrapper.cs / 1305600 / 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; } GC.SuppressFinalize(this); } 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; } GC.SuppressFinalize(this); } 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
- _TLSstream.cs
- SR.cs
- ButtonStandardAdapter.cs
- WebPartVerbCollection.cs
- ThreadExceptionDialog.cs
- EntityDataSource.cs
- ScriptHandlerFactory.cs
- TemplateControlBuildProvider.cs
- HttpHostedTransportConfiguration.cs
- Transform.cs
- DynamicPropertyReader.cs
- ProxyFragment.cs
- ExpressionBuilder.cs
- TextEndOfLine.cs
- WebConfigurationHostFileChange.cs
- XpsFixedDocumentReaderWriter.cs
- URLIdentityPermission.cs
- DecoratedNameAttribute.cs
- RegionInfo.cs
- UiaCoreProviderApi.cs
- ConversionContext.cs
- MimePart.cs
- AccessControlEntry.cs
- ImageKeyConverter.cs
- FormsAuthenticationUserCollection.cs
- RoutedEventHandlerInfo.cs
- HttpInputStream.cs
- LoadGrammarCompletedEventArgs.cs
- SingleResultAttribute.cs
- OuterGlowBitmapEffect.cs
- ToolStripGripRenderEventArgs.cs
- EventPrivateKey.cs
- TlsSspiNegotiation.cs
- RegisteredDisposeScript.cs
- ToolStripAdornerWindowService.cs
- WebPartHeaderCloseVerb.cs
- PasswordBox.cs
- EntityDataSourceWizardForm.cs
- WebPartDescriptionCollection.cs
- AnimatedTypeHelpers.cs
- PageContent.cs
- ChannelBase.cs
- RelationshipType.cs
- XamlFilter.cs
- DbConnectionClosed.cs
- WebPartZoneCollection.cs
- ContravarianceAdapter.cs
- Baml6Assembly.cs
- Region.cs
- XmlResolver.cs
- SpeechSeg.cs
- ProjectionPruner.cs
- WebPartCollection.cs
- XmlDocumentFragment.cs
- SystemColors.cs
- Point3DCollection.cs
- Util.cs
- Constants.cs
- AttributeEmitter.cs
- DesigntimeLicenseContextSerializer.cs
- Compilation.cs
- Parameter.cs
- ManagedFilter.cs
- PolygonHotSpot.cs
- CannotUnloadAppDomainException.cs
- ClientCredentialsElement.cs
- QuadraticEase.cs
- HuffmanTree.cs
- TreeViewItem.cs
- ImageInfo.cs
- DoWorkEventArgs.cs
- ProxyElement.cs
- AnnotationDocumentPaginator.cs
- XmlDataDocument.cs
- SystemIdentity.cs
- LambdaCompiler.Address.cs
- ComPlusInstanceProvider.cs
- HttpCacheVaryByContentEncodings.cs
- SourceFileInfo.cs
- Boolean.cs
- _CookieModule.cs
- UnsafeNativeMethods.cs
- ResolvedKeyFrameEntry.cs
- CategoryValueConverter.cs
- HtmlTernaryTree.cs
- InternalMappingException.cs
- ListViewGroupItemCollection.cs
- DrawingImage.cs
- BuildProvider.cs
- x509utils.cs
- IIS7UserPrincipal.cs
- SourceInterpreter.cs
- WebGetAttribute.cs
- TraceContextRecord.cs
- UInt64Storage.cs
- WasAdminWrapper.cs
- ExecutedRoutedEventArgs.cs
- SchemaHelper.cs
- WebConfigManager.cs
- ToolboxComponentsCreatingEventArgs.cs