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
- NetStream.cs
- PassportAuthenticationModule.cs
- PropertyPushdownHelper.cs
- ToolStripProgressBar.cs
- NotifyParentPropertyAttribute.cs
- Brush.cs
- QilFactory.cs
- TextEmbeddedObject.cs
- path.cs
- SrgsDocumentParser.cs
- CqlParser.cs
- SqlHelper.cs
- UndoManager.cs
- IssuedTokenParametersEndpointAddressElement.cs
- Trace.cs
- Vector3DConverter.cs
- DocumentGrid.cs
- ComponentChangedEvent.cs
- DeferredTextReference.cs
- RtfControlWordInfo.cs
- UpdatableGenericsFeature.cs
- PageClientProxyGenerator.cs
- XmlResolver.cs
- PrefixQName.cs
- BackStopAuthenticationModule.cs
- RIPEMD160Managed.cs
- DataGridViewButtonColumn.cs
- InternalEnumValidator.cs
- Symbol.cs
- ConnectionStringsExpressionBuilder.cs
- ListViewCommandEventArgs.cs
- MouseBinding.cs
- URL.cs
- SerializationInfoEnumerator.cs
- SchemaImporterExtensionElement.cs
- ContextMenuStripGroupCollection.cs
- GridViewRow.cs
- DataGridItem.cs
- XamlWriter.cs
- ControlAdapter.cs
- WizardSideBarListControlItemEventArgs.cs
- EdmPropertyAttribute.cs
- FlowLayout.cs
- SqlComparer.cs
- DataViewListener.cs
- CodeAccessSecurityEngine.cs
- AttachmentService.cs
- Win32KeyboardDevice.cs
- DataGridHeaderBorder.cs
- IHttpResponseInternal.cs
- ExceptionDetail.cs
- UpdatePanelTriggerCollection.cs
- Encoding.cs
- SqlProcedureAttribute.cs
- XMLSyntaxException.cs
- ProviderUtil.cs
- XmlBaseReader.cs
- InputDevice.cs
- DynamicValidator.cs
- SourceElementsCollection.cs
- XPathQilFactory.cs
- DataMisalignedException.cs
- ObjectDataProvider.cs
- NotifyInputEventArgs.cs
- InvokeGenerator.cs
- FilterableAttribute.cs
- BamlLocalizableResource.cs
- VScrollProperties.cs
- CallbackValidatorAttribute.cs
- SettingsAttributeDictionary.cs
- RedistVersionInfo.cs
- Random.cs
- SoapObjectInfo.cs
- AnnotationResourceChangedEventArgs.cs
- XmlComment.cs
- GridViewRow.cs
- AlgoModule.cs
- WindowHelperService.cs
- NegotiationTokenAuthenticatorStateCache.cs
- DataGridViewCellEventArgs.cs
- QueryStringConverter.cs
- SqlClientFactory.cs
- SafeCryptHandles.cs
- ConsumerConnectionPointCollection.cs
- OutputBuffer.cs
- keycontainerpermission.cs
- SmtpReplyReader.cs
- HttpRuntimeSection.cs
- DataGridTableCollection.cs
- SiblingIterators.cs
- SqlFacetAttribute.cs
- ToolStripItemClickedEventArgs.cs
- HttpServerProtocol.cs
- MultiSelectRootGridEntry.cs
- OrderPreservingSpoolingTask.cs
- SmiRecordBuffer.cs
- InternalsVisibleToAttribute.cs
- FixedSOMImage.cs
- EventBindingService.cs
- FileSystemEventArgs.cs