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
- InputBinder.cs
- FontStyle.cs
- AttributeExtensions.cs
- ThreadAttributes.cs
- DateTimeConstantAttribute.cs
- TypeNameParser.cs
- DesignTableCollection.cs
- PersonalizationDictionary.cs
- SerialStream.cs
- DomainUpDown.cs
- SoundPlayer.cs
- StringResourceManager.cs
- ListViewItem.cs
- XPathNavigatorReader.cs
- Container.cs
- MdiWindowListItemConverter.cs
- IApplicationTrustManager.cs
- EUCJPEncoding.cs
- TimeoutTimer.cs
- MailMessage.cs
- RemotingServices.cs
- BlurBitmapEffect.cs
- WebBrowserNavigatingEventHandler.cs
- GeometryCollection.cs
- SiteMap.cs
- SignedXml.cs
- EntryIndex.cs
- DocumentViewerBase.cs
- WindowsGraphicsWrapper.cs
- TypeSystem.cs
- BindableAttribute.cs
- TextEffect.cs
- TextEndOfParagraph.cs
- mansign.cs
- FilterQueryOptionExpression.cs
- SqlConnectionManager.cs
- PrintDialog.cs
- SQLStringStorage.cs
- EFDataModelProvider.cs
- QueryContinueDragEventArgs.cs
- FrameworkPropertyMetadata.cs
- HtmlImage.cs
- ValidationVisibilityAttribute.cs
- XmlSerializerSection.cs
- FontUnit.cs
- Permission.cs
- DbProviderSpecificTypePropertyAttribute.cs
- ProfileGroupSettings.cs
- dataSvcMapFileLoader.cs
- CornerRadius.cs
- FillBehavior.cs
- mediapermission.cs
- DelayedRegex.cs
- PeerNameRecordCollection.cs
- CodeTypeMemberCollection.cs
- FunctionQuery.cs
- RegistryConfigurationProvider.cs
- CorrelationToken.cs
- DropDownHolder.cs
- MetadataUtil.cs
- Win32MouseDevice.cs
- SmtpTransport.cs
- Polyline.cs
- Wizard.cs
- IPAddress.cs
- InvalidComObjectException.cs
- DBCommandBuilder.cs
- EventHandlingScope.cs
- CodeObjectCreateExpression.cs
- columnmapfactory.cs
- CustomAttributeFormatException.cs
- SqlConnectionPoolGroupProviderInfo.cs
- EmptyImpersonationContext.cs
- SqlCachedBuffer.cs
- EntityDataSourceContainerNameItem.cs
- CqlQuery.cs
- SoapCodeExporter.cs
- DefaultSection.cs
- DoubleLinkListEnumerator.cs
- ApplicationFileParser.cs
- SystemIPGlobalProperties.cs
- SingleAnimationBase.cs
- DropSource.cs
- WMICapabilities.cs
- ForEachAction.cs
- XmlSchemaAttribute.cs
- Helpers.cs
- PerformanceCountersElement.cs
- SoapReflectionImporter.cs
- PriorityBinding.cs
- SoapIgnoreAttribute.cs
- ObservableCollection.cs
- PropertyToken.cs
- SpeakProgressEventArgs.cs
- RelationshipWrapper.cs
- ScriptHandlerFactory.cs
- ByteStorage.cs
- Application.cs
- DocComment.cs
- IdnMapping.cs