Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- MouseEvent.cs
- CapacityStreamGeometryContext.cs
- Vector3DAnimationBase.cs
- _Events.cs
- SecurityProtocol.cs
- altserialization.cs
- XmlTypeAttribute.cs
- TagMapInfo.cs
- FreeFormPanel.cs
- DeflateStream.cs
- ToolStripItemClickedEventArgs.cs
- VScrollBar.cs
- SqlDataSourceSelectingEventArgs.cs
- EntityContainerAssociationSet.cs
- TagMapInfo.cs
- Encoder.cs
- WebPartEditorApplyVerb.cs
- SortFieldComparer.cs
- SqlTriggerAttribute.cs
- ProtectedProviderSettings.cs
- ChtmlImageAdapter.cs
- NativeWindow.cs
- NonPrimarySelectionGlyph.cs
- OrderedDictionary.cs
- ToolStripOverflowButton.cs
- TraceUtility.cs
- PropertyIDSet.cs
- PKCS1MaskGenerationMethod.cs
- PermissionRequestEvidence.cs
- XmlNamedNodeMap.cs
- SessionSwitchEventArgs.cs
- ReachFixedDocumentSerializer.cs
- TextPattern.cs
- ListViewCommandEventArgs.cs
- CustomAttribute.cs
- FormatStringEditor.cs
- KeysConverter.cs
- ObjectHelper.cs
- InfoCardTrace.cs
- ListViewTableRow.cs
- ZoneButton.cs
- FileUtil.cs
- ProfileSettings.cs
- VirtualDirectoryMappingCollection.cs
- RSAOAEPKeyExchangeDeformatter.cs
- NativeMethods.cs
- RegexTree.cs
- BamlTreeMap.cs
- columnmapfactory.cs
- StaticExtension.cs
- SmiContext.cs
- HttpApplicationStateBase.cs
- ContainsRowNumberChecker.cs
- Duration.cs
- Stream.cs
- ConstNode.cs
- TextAdaptor.cs
- QueryResult.cs
- DefaultValueTypeConverter.cs
- ExpressionBuilder.cs
- ExceptionHandler.cs
- DataObjectAttribute.cs
- ConsoleEntryPoint.cs
- Model3DGroup.cs
- InputElement.cs
- WebServiceFault.cs
- BaseCAMarshaler.cs
- NavigatingCancelEventArgs.cs
- AddInAttribute.cs
- MediaPlayer.cs
- MimeTypeAttribute.cs
- ProcessInfo.cs
- RestHandlerFactory.cs
- SvcMapFileLoader.cs
- DataGridItem.cs
- WebPartsPersonalizationAuthorization.cs
- ExpressionEditorAttribute.cs
- DebugView.cs
- ResourceReferenceExpressionConverter.cs
- BrowserCapabilitiesFactoryBase.cs
- X509UI.cs
- XmlObjectSerializer.cs
- RegexBoyerMoore.cs
- RegisteredDisposeScript.cs
- ViewLoader.cs
- ClientConfigurationSystem.cs
- BinaryObjectWriter.cs
- EdmComplexTypeAttribute.cs
- Style.cs
- XmlDocumentType.cs
- DataBoundControlHelper.cs
- EventArgs.cs
- Error.cs
- UnmanagedMemoryStream.cs
- Assert.cs
- ScrollBar.cs
- ConfigurationSettings.cs
- TextFragmentEngine.cs
- SecurityCriticalDataForSet.cs
- RootNamespaceAttribute.cs