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
- NamedPermissionSet.cs
- CustomSignedXml.cs
- StyleTypedPropertyAttribute.cs
- TreeView.cs
- RegexRunner.cs
- AdPostCacheSubstitution.cs
- Dynamic.cs
- BamlMapTable.cs
- _StreamFramer.cs
- WindowsListViewGroupHelper.cs
- MessageFilterException.cs
- DataObjectSettingDataEventArgs.cs
- HMAC.cs
- LifetimeManager.cs
- EdgeModeValidation.cs
- ParserHooks.cs
- PerfCounters.cs
- SiteMapPath.cs
- SqlHelper.cs
- DispatcherExceptionFilterEventArgs.cs
- CssTextWriter.cs
- ImportContext.cs
- Certificate.cs
- MouseEventArgs.cs
- RouteItem.cs
- ConfigXmlAttribute.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- SeekStoryboard.cs
- BezierSegment.cs
- XmlDataImplementation.cs
- PeerMessageDispatcher.cs
- VirtualDirectoryMapping.cs
- ClientUtils.cs
- DeflateInput.cs
- NullRuntimeConfig.cs
- _ShellExpression.cs
- SecurityDescriptor.cs
- XmlSchemaExternal.cs
- ThreadExceptionEvent.cs
- CompilerInfo.cs
- Vector.cs
- SessionState.cs
- QilIterator.cs
- ListBoxDesigner.cs
- FirstQueryOperator.cs
- Pts.cs
- TransactionInterop.cs
- ThicknessKeyFrameCollection.cs
- ResourceAttributes.cs
- InputElement.cs
- PhysicalOps.cs
- HttpsHostedTransportConfiguration.cs
- KeyboardDevice.cs
- RuleInfoComparer.cs
- ListViewInsertedEventArgs.cs
- TemplateContent.cs
- SpellerInterop.cs
- ServiceObjectContainer.cs
- RadioButtonDesigner.cs
- EntryWrittenEventArgs.cs
- PersistenceTypeAttribute.cs
- WebBrowserPermission.cs
- RequiredFieldValidator.cs
- NullableBoolConverter.cs
- AnnotationResource.cs
- ContainerUtilities.cs
- TabControl.cs
- SEHException.cs
- ApplicationInterop.cs
- TraceFilter.cs
- SoapElementAttribute.cs
- StatusBarPanelClickEvent.cs
- ProcessThreadCollection.cs
- DeflateStreamAsyncResult.cs
- ComponentEditorPage.cs
- WebPartConnection.cs
- ColumnTypeConverter.cs
- FixedHighlight.cs
- TdsValueSetter.cs
- FunctionDetailsReader.cs
- SmiSettersStream.cs
- StreamGeometry.cs
- MetadataItemEmitter.cs
- ToolStripDropDownClosingEventArgs.cs
- StringStorage.cs
- SamlEvidence.cs
- DSACryptoServiceProvider.cs
- FacetDescription.cs
- SqlTriggerAttribute.cs
- CollectionChangeEventArgs.cs
- CqlLexerHelpers.cs
- TextSpanModifier.cs
- ToolStripSettings.cs
- DrawingImage.cs
- SimpleType.cs
- BindableTemplateBuilder.cs
- DefaultAsyncDataDispatcher.cs
- Buffer.cs
- ConnectionInterfaceCollection.cs
- ScrollViewer.cs