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
- SrgsDocumentParser.cs
- SrgsSubset.cs
- Activator.cs
- StrokeCollection.cs
- ObjectConverter.cs
- EntityWithChangeTrackerStrategy.cs
- BaseDataList.cs
- InputScopeNameConverter.cs
- XamlReader.cs
- Vector.cs
- CompiledRegexRunnerFactory.cs
- CodeAttributeArgumentCollection.cs
- WebConfigurationManager.cs
- cookiecollection.cs
- JsonDataContract.cs
- DependencyProperty.cs
- SettingsAttributes.cs
- DetailsViewUpdatedEventArgs.cs
- WizardDesigner.cs
- SmtpReplyReaderFactory.cs
- Input.cs
- PolicyManager.cs
- XmlTextEncoder.cs
- DocumentGridPage.cs
- HelpEvent.cs
- XmlReturnWriter.cs
- XmlILTrace.cs
- ToolboxDataAttribute.cs
- SqlDataSourceCommandEventArgs.cs
- Listbox.cs
- RightsManagementInformation.cs
- DispatchWrapper.cs
- MachineKeySection.cs
- SelectionList.cs
- FormattedText.cs
- AsyncPostBackErrorEventArgs.cs
- DataFieldConverter.cs
- SQLSingle.cs
- CasesDictionary.cs
- IconConverter.cs
- CounterCreationDataCollection.cs
- PrintPreviewGraphics.cs
- IdleTimeoutMonitor.cs
- DbBuffer.cs
- AmbientLight.cs
- HttpSessionStateBase.cs
- DataGridDetailsPresenterAutomationPeer.cs
- ButtonChrome.cs
- FormParameter.cs
- Baml6ConstructorInfo.cs
- Site.cs
- Button.cs
- TreeView.cs
- OracleFactory.cs
- CachingHintValidation.cs
- UserControlCodeDomTreeGenerator.cs
- StylusShape.cs
- WpfMemberInvoker.cs
- InvariantComparer.cs
- WebPartManagerInternals.cs
- ErrorEventArgs.cs
- WebPartAuthorizationEventArgs.cs
- DrawingContextWalker.cs
- WindowsEditBoxRange.cs
- Point4D.cs
- CodeCommentStatementCollection.cs
- DataServiceKeyAttribute.cs
- NegationPusher.cs
- XmlLinkedNode.cs
- ValidationErrorCollection.cs
- BlurBitmapEffect.cs
- TableLayoutStyleCollection.cs
- WebPartZoneBaseDesigner.cs
- DiscoveryClientOutputChannel.cs
- BinaryObjectReader.cs
- LocalizableAttribute.cs
- BuildProvider.cs
- WCFModelStrings.Designer.cs
- MultiView.cs
- TextEffectCollection.cs
- Activator.cs
- X509CertificateCollection.cs
- PenLineJoinValidation.cs
- SurrogateEncoder.cs
- XmlChildEnumerator.cs
- GridViewColumn.cs
- JsonFormatReaderGenerator.cs
- DataSetMappper.cs
- TreeNodeSelectionProcessor.cs
- DispatchChannelSink.cs
- SessionPageStatePersister.cs
- ExternalCalls.cs
- Automation.cs
- CompositeControl.cs
- NavigationProperty.cs
- ArrayList.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- PropertyValueUIItem.cs
- LinearGradientBrush.cs
- SocketInformation.cs