Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Shared / MS / Internal / ReaderWriterLockWrapper.cs / 1 / ReaderWriterLockWrapper.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description:
// Wrapper that allows a ReaderWriterLock to work with C#'s using() clause
//
// History:
// 07/23/2003 : BrendanM Ported to WCP
//
//---------------------------------------------------------------------------
using System;
using System.Threading;
using MS.Internal.WindowsBase;
namespace MS.Internal
{
// Wrapper that allows a ReaderWriterLock to work with C#'s using() clause
[FriendAccessAllowed] // Built into Base, used by Core and Framework.
internal class ReaderWriterLockWrapper
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
internal ReaderWriterLockWrapper()
{
_rwLock = new ReaderWriterLock();
_awr = new AutoWriterRelease(_rwLock);
_arr = new AutoReaderRelease(_rwLock);
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Properties
//
//-----------------------------------------------------
#region Internal Properties
internal IDisposable WriteLock
{
get
{
_rwLock.AcquireWriterLock(Timeout.Infinite);
return _awr;
}
}
internal IDisposable ReadLock
{
get
{
_rwLock.AcquireReaderLock(Timeout.Infinite);
return _arr;
}
}
#endregion Internal Properties
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
private ReaderWriterLock _rwLock;
private AutoReaderRelease _arr;
private AutoWriterRelease _awr;
#endregion Private Fields
//-----------------------------------------------------
//
// Private Classes & Structs
//
//------------------------------------------------------
#region Private Classes & Structs
private struct AutoWriterRelease : IDisposable
{
public AutoWriterRelease(ReaderWriterLock rwLock)
{
_lock = rwLock;
}
public void Dispose()
{
_lock.ReleaseWriterLock();
}
private ReaderWriterLock _lock;
}
private struct AutoReaderRelease : IDisposable
{
public AutoReaderRelease(ReaderWriterLock rwLock)
{
_lock = rwLock;
}
public void Dispose()
{
_lock.ReleaseReaderLock();
}
private ReaderWriterLock _lock;
}
#endregion Private Classes
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description:
// Wrapper that allows a ReaderWriterLock to work with C#'s using() clause
//
// History:
// 07/23/2003 : BrendanM Ported to WCP
//
//---------------------------------------------------------------------------
using System;
using System.Threading;
using MS.Internal.WindowsBase;
namespace MS.Internal
{
// Wrapper that allows a ReaderWriterLock to work with C#'s using() clause
[FriendAccessAllowed] // Built into Base, used by Core and Framework.
internal class ReaderWriterLockWrapper
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
internal ReaderWriterLockWrapper()
{
_rwLock = new ReaderWriterLock();
_awr = new AutoWriterRelease(_rwLock);
_arr = new AutoReaderRelease(_rwLock);
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Properties
//
//-----------------------------------------------------
#region Internal Properties
internal IDisposable WriteLock
{
get
{
_rwLock.AcquireWriterLock(Timeout.Infinite);
return _awr;
}
}
internal IDisposable ReadLock
{
get
{
_rwLock.AcquireReaderLock(Timeout.Infinite);
return _arr;
}
}
#endregion Internal Properties
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
private ReaderWriterLock _rwLock;
private AutoReaderRelease _arr;
private AutoWriterRelease _awr;
#endregion Private Fields
//-----------------------------------------------------
//
// Private Classes & Structs
//
//------------------------------------------------------
#region Private Classes & Structs
private struct AutoWriterRelease : IDisposable
{
public AutoWriterRelease(ReaderWriterLock rwLock)
{
_lock = rwLock;
}
public void Dispose()
{
_lock.ReleaseWriterLock();
}
private ReaderWriterLock _lock;
}
private struct AutoReaderRelease : IDisposable
{
public AutoReaderRelease(ReaderWriterLock rwLock)
{
_lock = rwLock;
}
public void Dispose()
{
_lock.ReleaseReaderLock();
}
private ReaderWriterLock _lock;
}
#endregion Private Classes
}
}
// 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
- Pkcs7Signer.cs
- RangeValidator.cs
- ModuleElement.cs
- CacheOutputQuery.cs
- RectKeyFrameCollection.cs
- BinHexEncoding.cs
- OutputCacheSection.cs
- PasswordRecovery.cs
- SelectionGlyphBase.cs
- DelayedRegex.cs
- ToolStripProgressBar.cs
- GeometryCollection.cs
- WriteableBitmap.cs
- FileDialog.cs
- ViewgenContext.cs
- HwndHost.cs
- ReadOnlyAttribute.cs
- ObjectDataProvider.cs
- SoapElementAttribute.cs
- ObjectListCommandEventArgs.cs
- WpfXamlType.cs
- SerializationFieldInfo.cs
- QueryReaderSettings.cs
- SafePEFileHandle.cs
- RelationshipManager.cs
- ControlPaint.cs
- GridViewRow.cs
- CapiSafeHandles.cs
- ProcessThreadDesigner.cs
- Point3DAnimationBase.cs
- StyleSheet.cs
- TextPattern.cs
- figurelengthconverter.cs
- CommandManager.cs
- FlowNode.cs
- OperatorExpressions.cs
- HtmlInputPassword.cs
- Application.cs
- SpeechRecognizer.cs
- DocumentXPathNavigator.cs
- ParentUndoUnit.cs
- UpdatePanel.cs
- SHA1.cs
- ELinqQueryState.cs
- ResolveCriteriaApril2005.cs
- KeyValueInternalCollection.cs
- SettingsPropertyValue.cs
- EntityDesignerUtils.cs
- GlyphRunDrawing.cs
- TreeNodeBindingCollection.cs
- ProviderCollection.cs
- AbsoluteQuery.cs
- NavigationExpr.cs
- WebPartDescription.cs
- HtmlTextArea.cs
- CultureInfoConverter.cs
- embossbitmapeffect.cs
- ByteAnimationBase.cs
- PolicyValidationException.cs
- CommandExpr.cs
- _DigestClient.cs
- GeneralTransform3D.cs
- StsCommunicationException.cs
- TaskScheduler.cs
- PeoplePickerWrapper.cs
- ContextDataSourceContextData.cs
- XmlQueryTypeFactory.cs
- FlowDocumentReaderAutomationPeer.cs
- RelationshipConstraintValidator.cs
- NetworkStream.cs
- FilePrompt.cs
- DependencyObjectPropertyDescriptor.cs
- SiteMapSection.cs
- CryptoHelper.cs
- XamlGridLengthSerializer.cs
- AppDomainUnloadedException.cs
- RegistrationServices.cs
- ClientConfigurationHost.cs
- ColorAnimationUsingKeyFrames.cs
- WindowsAltTab.cs
- SizeAnimationClockResource.cs
- ASCIIEncoding.cs
- SingleAnimation.cs
- TextModifierScope.cs
- EdmError.cs
- CodeMemberField.cs
- UrlMapping.cs
- SQLInt16Storage.cs
- ComPlusDiagnosticTraceRecords.cs
- IdentityHolder.cs
- VirtualDirectoryMapping.cs
- XmlBoundElement.cs
- InstrumentationTracker.cs
- DataGridViewRowsAddedEventArgs.cs
- __Filters.cs
- ProcessRequestArgs.cs
- QueryResponse.cs
- HostingEnvironmentException.cs
- DataSet.cs
- FixedStringLookup.cs