Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- Int32AnimationUsingKeyFrames.cs
- DesignerTransaction.cs
- SuppressIldasmAttribute.cs
- TextElement.cs
- Blend.cs
- RecognizedWordUnit.cs
- PerfService.cs
- DbConnectionFactory.cs
- TextBoxBase.cs
- RNGCryptoServiceProvider.cs
- RuntimeHelpers.cs
- VisualTreeHelper.cs
- _ListenerRequestStream.cs
- SqlPersonalizationProvider.cs
- TextEditorTables.cs
- ConvertTextFrag.cs
- OdbcConnectionStringbuilder.cs
- ConditionCollection.cs
- Rectangle.cs
- StateManagedCollection.cs
- PropertyRef.cs
- DocumentViewerBase.cs
- OdbcRowUpdatingEvent.cs
- BaseCollection.cs
- SmiMetaDataProperty.cs
- _RequestCacheProtocol.cs
- oledbmetadatacollectionnames.cs
- ActivityXRefPropertyEditor.cs
- _NestedSingleAsyncResult.cs
- EventProviderWriter.cs
- SendMailErrorEventArgs.cs
- Console.cs
- AsmxEndpointPickerExtension.cs
- HideDisabledControlAdapter.cs
- FontUnitConverter.cs
- HelloOperation11AsyncResult.cs
- PieceDirectory.cs
- EnumerableRowCollection.cs
- WebPartConnectionCollection.cs
- BamlVersionHeader.cs
- BinaryObjectInfo.cs
- FormViewCommandEventArgs.cs
- ApplicationServicesHostFactory.cs
- WindowsPrincipal.cs
- TraceSection.cs
- Context.cs
- FileDialog_Vista_Interop.cs
- StateItem.cs
- SoapExtensionStream.cs
- TreeBuilder.cs
- DataBoundLiteralControl.cs
- RecordBuilder.cs
- TextServicesHost.cs
- AnnotationComponentManager.cs
- XPathDocumentIterator.cs
- KeyGesture.cs
- MachinePropertyVariants.cs
- TemplateColumn.cs
- TextTreeNode.cs
- WsdlBuildProvider.cs
- MachineSettingsSection.cs
- Token.cs
- CharUnicodeInfo.cs
- EarlyBoundInfo.cs
- FacetChecker.cs
- BaseHashHelper.cs
- MessageDescriptionCollection.cs
- OracleSqlParser.cs
- CompModSwitches.cs
- OleDbConnection.cs
- NonParentingControl.cs
- SafeWaitHandle.cs
- ApplicationInterop.cs
- UriTemplateLiteralQueryValue.cs
- SingleTagSectionHandler.cs
- QuadraticBezierSegment.cs
- PreviewKeyDownEventArgs.cs
- XmlDataDocument.cs
- FileRegion.cs
- CachedCompositeFamily.cs
- CounterCreationDataCollection.cs
- recordstatescratchpad.cs
- ObjectViewListener.cs
- TabControl.cs
- PerformanceCounterPermissionAttribute.cs
- StackOverflowException.cs
- HMACMD5.cs
- NameValuePair.cs
- DuplexChannelBinder.cs
- Atom10FormatterFactory.cs
- AnnotationResourceChangedEventArgs.cs
- SimpleLine.cs
- SecurityUtils.cs
- MsdtcWrapper.cs
- LightweightCodeGenerator.cs
- DataServiceException.cs
- SafeHandles.cs
- GradientStop.cs
- ProviderConnectionPoint.cs
- ColumnResult.cs