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
- StorageComplexPropertyMapping.cs
- DetailsViewCommandEventArgs.cs
- AllMembershipCondition.cs
- Run.cs
- Decorator.cs
- TraceHandler.cs
- EdmScalarPropertyAttribute.cs
- StringArrayConverter.cs
- SelfIssuedAuthRSACryptoProvider.cs
- XmlSubtreeReader.cs
- FolderBrowserDialog.cs
- RSAPKCS1KeyExchangeFormatter.cs
- SafeNativeMethods.cs
- CornerRadiusConverter.cs
- SqlWorkflowPersistenceService.cs
- SolidBrush.cs
- FixedFlowMap.cs
- CollectionsUtil.cs
- PrintDialog.cs
- PropertyTabAttribute.cs
- PtsCache.cs
- DefaultEvaluationContext.cs
- Brushes.cs
- SqlProfileProvider.cs
- MimeMultiPart.cs
- Soap.cs
- JsonWriterDelegator.cs
- AssociationSet.cs
- CompoundFileStorageReference.cs
- XmlNamespaceMapping.cs
- ConfigurationSectionCollection.cs
- ObjectItemAssemblyLoader.cs
- Query.cs
- UrlMappingCollection.cs
- ThemeConfigurationDialog.cs
- PrintPreviewDialog.cs
- ResolvePPIDRequest.cs
- DataList.cs
- CommonRemoteMemoryBlock.cs
- FormsAuthenticationUser.cs
- HttpHandlerActionCollection.cs
- MenuCommand.cs
- EventBuilder.cs
- TemplateComponentConnector.cs
- CharStorage.cs
- CaretElement.cs
- oledbconnectionstring.cs
- CheckBox.cs
- DataSourceExpressionCollection.cs
- RowCache.cs
- ProxyOperationRuntime.cs
- SqlTypesSchemaImporter.cs
- UnsafeNativeMethods.cs
- BufferAllocator.cs
- FunctionUpdateCommand.cs
- WindowsBrush.cs
- Convert.cs
- EtwTrace.cs
- SchemaCollectionCompiler.cs
- DataGridViewCellStateChangedEventArgs.cs
- VirtualDirectoryMappingCollection.cs
- UserControlDesigner.cs
- BitmapPalettes.cs
- ObjectNotFoundException.cs
- DisplayInformation.cs
- EntityUtil.cs
- OraclePermission.cs
- ConfigXmlReader.cs
- ValidatedControlConverter.cs
- DataGridViewSortCompareEventArgs.cs
- UIPermission.cs
- DtdParser.cs
- ArgumentElement.cs
- GraphicsPathIterator.cs
- CollectionExtensions.cs
- IEnumerable.cs
- QilScopedVisitor.cs
- ReturnValue.cs
- FixUpCollection.cs
- DocumentViewerConstants.cs
- ListControl.cs
- RequestSecurityTokenResponse.cs
- ConfigurationLockCollection.cs
- XmlCustomFormatter.cs
- EventRoute.cs
- GridSplitterAutomationPeer.cs
- TextServicesManager.cs
- UniqueSet.cs
- Trace.cs
- SHA384.cs
- HttpPostProtocolReflector.cs
- ServerIdentity.cs
- DesignerMetadata.cs
- SplitterCancelEvent.cs
- ReachDocumentSequenceSerializerAsync.cs
- ColorTranslator.cs
- BezierSegment.cs
- XmlSchemaDatatype.cs
- CachedFontFace.cs
- BinaryWriter.cs