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
- Vector3D.cs
- PagesChangedEventArgs.cs
- RemoteWebConfigurationHostStream.cs
- KeyValuePairs.cs
- LowerCaseStringConverter.cs
- TypeExtensions.cs
- ContentFilePart.cs
- PeerNameRecordCollection.cs
- PrintController.cs
- SignatureToken.cs
- Cursor.cs
- XmlObjectSerializerReadContextComplex.cs
- SafeSecurityHelper.cs
- MenuScrollingVisibilityConverter.cs
- OleDbSchemaGuid.cs
- StaticFileHandler.cs
- BroadcastEventHelper.cs
- UserControl.cs
- WorkflowDebuggerSteppingAttribute.cs
- LinqDataSourceDeleteEventArgs.cs
- MsmqActivation.cs
- MulticastNotSupportedException.cs
- ForEachDesigner.xaml.cs
- SettingsAttributes.cs
- Header.cs
- ADMembershipProvider.cs
- TreeViewItemAutomationPeer.cs
- _StreamFramer.cs
- ResourcePermissionBase.cs
- StringBuilder.cs
- SizeF.cs
- Merger.cs
- OrderedDictionary.cs
- OdbcCommand.cs
- SettingsAttributeDictionary.cs
- StringBlob.cs
- PostBackOptions.cs
- ExpressionBuilder.cs
- XPathSingletonIterator.cs
- Debug.cs
- XmlDataDocument.cs
- DefaultPropertyAttribute.cs
- DocumentXmlWriter.cs
- ToolStripArrowRenderEventArgs.cs
- EventWaitHandle.cs
- OptimisticConcurrencyException.cs
- WorkflowInvoker.cs
- DelegatingTypeDescriptionProvider.cs
- ZoneButton.cs
- TdsParserStaticMethods.cs
- TransformedBitmap.cs
- WorkflowDesignerColors.cs
- ComponentEvent.cs
- MsmqChannelFactoryBase.cs
- NamespaceDecl.cs
- SectionVisual.cs
- WindowsListView.cs
- XmlIlGenerator.cs
- MulticastIPAddressInformationCollection.cs
- SqlCommandBuilder.cs
- DataColumnMappingCollection.cs
- DataGridViewLinkCell.cs
- FormClosingEvent.cs
- TriggerCollection.cs
- HtmlInputImage.cs
- PersistenceContext.cs
- DelegatingConfigHost.cs
- AssertFilter.cs
- PackageRelationshipSelector.cs
- MatchAllMessageFilter.cs
- objectquery_tresulttype.cs
- PerformanceCounterCategory.cs
- DetailsViewPageEventArgs.cs
- WinFormsUtils.cs
- ContentHostHelper.cs
- SimpleType.cs
- TypeValidationEventArgs.cs
- DesignerToolboxInfo.cs
- OleDbStruct.cs
- GroupBox.cs
- cryptoapiTransform.cs
- DiffuseMaterial.cs
- storepermission.cs
- AccessDataSourceView.cs
- GifBitmapEncoder.cs
- TextBoxRenderer.cs
- Schema.cs
- SignatureGenerator.cs
- EpmContentSerializerBase.cs
- ActivityBindForm.Designer.cs
- CategoryNameCollection.cs
- SystemInfo.cs
- ImplicitInputBrush.cs
- XmlSchemaNotation.cs
- ByteStream.cs
- AssemblyHelper.cs
- Int64KeyFrameCollection.cs
- StateManagedCollection.cs
- ClientRuntimeConfig.cs
- XmlCustomFormatter.cs