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
- MarshalByValueComponent.cs
- HttpException.cs
- Vector3DCollectionConverter.cs
- TemplateComponentConnector.cs
- EntityCollection.cs
- _ChunkParse.cs
- SchemaAttDef.cs
- SendingRequestEventArgs.cs
- SoapSchemaImporter.cs
- TemplateControl.cs
- backend.cs
- Latin1Encoding.cs
- NegatedCellConstant.cs
- CacheRequest.cs
- DisplayMemberTemplateSelector.cs
- TryCatchDesigner.xaml.cs
- FloaterBaseParagraph.cs
- CallSiteHelpers.cs
- ApplicationServiceHelper.cs
- ExpressionWriter.cs
- RoleGroupCollection.cs
- ContentOperations.cs
- _BasicClient.cs
- ManagementObjectCollection.cs
- DecoderNLS.cs
- _UriTypeConverter.cs
- TreeNodeCollectionEditor.cs
- ConnectionInterfaceCollection.cs
- EditorPartCollection.cs
- FacetEnabledSchemaElement.cs
- WebPartDisplayMode.cs
- TypeConverterHelper.cs
- EncryptedXml.cs
- TextBoxBase.cs
- MdiWindowListItemConverter.cs
- BamlBinaryReader.cs
- SelectingProviderEventArgs.cs
- SafeRightsManagementPubHandle.cs
- OdbcException.cs
- ProviderMetadata.cs
- ToolStripKeyboardHandlingService.cs
- SQLInt16.cs
- Triplet.cs
- GridViewCancelEditEventArgs.cs
- HttpListenerResponse.cs
- SizeLimitedCache.cs
- Assert.cs
- DeflateEmulationStream.cs
- HwndAppCommandInputProvider.cs
- DataSourceComponent.cs
- CodeTypeMember.cs
- Table.cs
- Label.cs
- ResourceAttributes.cs
- EventlogProvider.cs
- ProxyWebPart.cs
- HtmlTableCellCollection.cs
- DetailsViewModeEventArgs.cs
- XmlSchemaSimpleType.cs
- TextLineResult.cs
- XmlCharCheckingReader.cs
- XhtmlBasicPageAdapter.cs
- DescendantQuery.cs
- AutoResizedEvent.cs
- DataListCommandEventArgs.cs
- DataServiceSaveChangesEventArgs.cs
- DbFunctionCommandTree.cs
- Config.cs
- MsmqIntegrationChannelFactory.cs
- ProfileSettingsCollection.cs
- BrowserCapabilitiesFactory.cs
- QuaternionAnimation.cs
- MediaElementAutomationPeer.cs
- MessageSmuggler.cs
- CryptoProvider.cs
- HttpDictionary.cs
- GradientStop.cs
- _NegotiateClient.cs
- FontWeights.cs
- SqlCrossApplyToCrossJoin.cs
- TextRunCache.cs
- ListViewItemEventArgs.cs
- FormViewPageEventArgs.cs
- ObjectDataSourceDisposingEventArgs.cs
- AliasExpr.cs
- MatrixValueSerializer.cs
- _Semaphore.cs
- QuadTree.cs
- DataConnectionHelper.cs
- ConditionalAttribute.cs
- SurrogateDataContract.cs
- X509ClientCertificateAuthenticationElement.cs
- InputScopeConverter.cs
- SystemIPv6InterfaceProperties.cs
- CaseStatementProjectedSlot.cs
- XmlSchemaValidationException.cs
- WebPartAuthorizationEventArgs.cs
- Debug.cs
- CqlQuery.cs
- TemplateNameScope.cs