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
- UriTemplateClientFormatter.cs
- PropertyEntry.cs
- MSG.cs
- SystemWebSectionGroup.cs
- IsolatedStorageFilePermission.cs
- SchemaImporterExtensionElement.cs
- MultilineStringConverter.cs
- wmiprovider.cs
- LongAverageAggregationOperator.cs
- Repeater.cs
- RegistrationServices.cs
- HttpPostedFile.cs
- ImageAutomationPeer.cs
- EntityWrapperFactory.cs
- RowCache.cs
- DefaultValueConverter.cs
- ColorConvertedBitmap.cs
- ManagementPath.cs
- AsyncOperationManager.cs
- ExtensionQuery.cs
- EventlogProvider.cs
- SafeLocalAllocation.cs
- invalidudtexception.cs
- PointLight.cs
- CharEnumerator.cs
- QilLoop.cs
- ScrollData.cs
- MenuTracker.cs
- TraceUtils.cs
- AllMembershipCondition.cs
- _ScatterGatherBuffers.cs
- BaseCodePageEncoding.cs
- ApplicationDirectoryMembershipCondition.cs
- WebPartExportVerb.cs
- PriorityBinding.cs
- MetabaseServerConfig.cs
- HttpEncoder.cs
- ManagedFilter.cs
- DataGridViewCellPaintingEventArgs.cs
- Array.cs
- PrinterSettings.cs
- SmtpSection.cs
- TableSectionStyle.cs
- KeyValueConfigurationElement.cs
- ZipFileInfo.cs
- XhtmlBasicControlAdapter.cs
- ServicePoint.cs
- NativeMethodsCLR.cs
- CommandLineParser.cs
- SafeNativeMethods.cs
- ApplicationId.cs
- ProxyWebPart.cs
- UxThemeWrapper.cs
- NegationPusher.cs
- ProcessModelSection.cs
- ClockGroup.cs
- UInt64.cs
- SortAction.cs
- RotateTransform3D.cs
- DataGridTableStyleMappingNameEditor.cs
- DataGridRow.cs
- MessageHeaderInfoTraceRecord.cs
- PathSegmentCollection.cs
- EndpointBehaviorElementCollection.cs
- PathSegment.cs
- ThreadInterruptedException.cs
- AutoResizedEvent.cs
- ProcessModelSection.cs
- ImageDrawing.cs
- FormsAuthenticationCredentials.cs
- metadatamappinghashervisitor.cs
- FacetValues.cs
- MaterializeFromAtom.cs
- RSAPKCS1SignatureFormatter.cs
- RotateTransform.cs
- TableLayoutPanel.cs
- SqlBulkCopyColumnMappingCollection.cs
- HostedNamedPipeTransportManager.cs
- ApplicationSecurityInfo.cs
- MenuItem.cs
- NullableBoolConverter.cs
- MouseBinding.cs
- MouseGesture.cs
- XmlSchemaProviderAttribute.cs
- WrapPanel.cs
- SqlDataRecord.cs
- ConfigurationManagerHelperFactory.cs
- ThreadStartException.cs
- Inflater.cs
- ProviderConnectionPoint.cs
- SystemKeyConverter.cs
- TileBrush.cs
- TextSearch.cs
- BasicHttpSecurityMode.cs
- SelectedDatesCollection.cs
- TextRangeBase.cs
- SecurityContext.cs
- XmlSchemaValidationException.cs
- LoginViewDesigner.cs
- ZipIOFileItemStream.cs