Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ReflectionServiceProvider.cs
- SqlDataSourceTableQuery.cs
- EnumerableCollectionView.cs
- UIElement.cs
- FormsAuthenticationModule.cs
- RegistrySecurity.cs
- TabletDevice.cs
- NameValueConfigurationCollection.cs
- BitmapEffectCollection.cs
- RegionInfo.cs
- SqlNode.cs
- StylusPointPropertyId.cs
- TraceListener.cs
- PropertyEntry.cs
- DiscoveryService.cs
- Style.cs
- StylusPointPropertyUnit.cs
- IDispatchConstantAttribute.cs
- BorderGapMaskConverter.cs
- IteratorDescriptor.cs
- EnvelopedSignatureTransform.cs
- SimpleBitVector32.cs
- HtmlTableCellCollection.cs
- TableLayoutSettings.cs
- XpsFontSerializationService.cs
- UnsafeNativeMethodsMilCoreApi.cs
- NumberFunctions.cs
- DictationGrammar.cs
- CodeDomDecompiler.cs
- PageParserFilter.cs
- FixedTextSelectionProcessor.cs
- ProxyElement.cs
- BinaryReader.cs
- Rotation3DKeyFrameCollection.cs
- UnsafeNativeMethods.cs
- CommandSet.cs
- NamedObject.cs
- Error.cs
- TreeNodeStyleCollection.cs
- StatusBarItemAutomationPeer.cs
- PathData.cs
- WeakReferenceList.cs
- StandardCommands.cs
- EditorPartCollection.cs
- RuntimeIdentifierPropertyAttribute.cs
- IpcChannelHelper.cs
- PolyBezierSegmentFigureLogic.cs
- NativeMethods.cs
- PrintPreviewGraphics.cs
- XsltFunctions.cs
- EncryptedData.cs
- OdbcHandle.cs
- regiisutil.cs
- Vector3dCollection.cs
- VariantWrapper.cs
- MsmqMessage.cs
- Converter.cs
- Maps.cs
- Component.cs
- PropertyConverter.cs
- RestHandler.cs
- ExternalCalls.cs
- RawStylusSystemGestureInputReport.cs
- PageCodeDomTreeGenerator.cs
- DispatcherExceptionEventArgs.cs
- EncryptedKey.cs
- ClosableStream.cs
- XmlJsonReader.cs
- IIS7WorkerRequest.cs
- RegexCompiler.cs
- ZeroOpNode.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- CodeGenerator.cs
- HttpStreamMessageEncoderFactory.cs
- WebPartPersonalization.cs
- GradientBrush.cs
- WrapPanel.cs
- ProtocolsConfigurationHandler.cs
- XmlDocumentSchema.cs
- ImageInfo.cs
- RefreshEventArgs.cs
- TypeUnloadedException.cs
- TileModeValidation.cs
- ElementMarkupObject.cs
- HandledMouseEvent.cs
- OdbcConnectionFactory.cs
- EntityViewGenerationConstants.cs
- HScrollBar.cs
- _SslStream.cs
- FrameworkContentElement.cs
- TableDesigner.cs
- Walker.cs
- ClipboardData.cs
- DictionaryEntry.cs
- CompressionTransform.cs
- TextPointerBase.cs
- OutputCacheModule.cs
- SmtpException.cs
- TriggerActionCollection.cs
- RuleCache.cs