Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- WebContext.cs
- SectionInformation.cs
- HeaderUtility.cs
- Matrix3D.cs
- ThreadPool.cs
- ToolStripItemImageRenderEventArgs.cs
- TablePatternIdentifiers.cs
- DataGridViewBand.cs
- ProxyManager.cs
- CompilerResults.cs
- TranslateTransform3D.cs
- Model3DGroup.cs
- XmlChoiceIdentifierAttribute.cs
- MetadataSource.cs
- ConnectionManagementElement.cs
- DataGridViewUtilities.cs
- WebContentFormatHelper.cs
- PageFunction.cs
- DaylightTime.cs
- storepermissionattribute.cs
- OdbcCommandBuilder.cs
- BitmapEffectGroup.cs
- Function.cs
- SmtpReplyReaderFactory.cs
- TrailingSpaceComparer.cs
- ThreadExceptionEvent.cs
- ResourcesChangeInfo.cs
- TcpTransportElement.cs
- BamlCollectionHolder.cs
- TransformationRules.cs
- CancellationScope.cs
- XmlDataSourceNodeDescriptor.cs
- ObjectItemCollection.cs
- ManagementClass.cs
- SizeFConverter.cs
- GregorianCalendar.cs
- SendMailErrorEventArgs.cs
- Int32Storage.cs
- DropShadowBitmapEffect.cs
- SqlWriter.cs
- UserPreferenceChangedEventArgs.cs
- TextBoxBase.cs
- RestClientProxyHandler.cs
- VectorAnimationUsingKeyFrames.cs
- FormView.cs
- WebMessageFormatHelper.cs
- TemplatedAdorner.cs
- DetailsViewUpdatedEventArgs.cs
- CollaborationHelperFunctions.cs
- InertiaExpansionBehavior.cs
- HtmlWindow.cs
- XmlResolver.cs
- _DigestClient.cs
- VideoDrawing.cs
- TrailingSpaceComparer.cs
- MemberPath.cs
- OverrideMode.cs
- RoutedUICommand.cs
- xmlsaver.cs
- Crypto.cs
- Dictionary.cs
- XmlSchemaSimpleTypeUnion.cs
- CqlIdentifiers.cs
- FollowerQueueCreator.cs
- HostedBindingBehavior.cs
- BamlResourceContent.cs
- SymDocumentType.cs
- Base64Encoder.cs
- ValueUnavailableException.cs
- UpdatableWrapper.cs
- Annotation.cs
- FormViewModeEventArgs.cs
- ColumnProvider.cs
- GB18030Encoding.cs
- XmlQueryType.cs
- RetriableClipboard.cs
- Context.cs
- DefaultTraceListener.cs
- ColorDialog.cs
- SqlFactory.cs
- DependencyPropertyKey.cs
- Win32Interop.cs
- DocumentPage.cs
- UnsafeNativeMethods.cs
- Point3DConverter.cs
- DefaultPrintController.cs
- ImageFormat.cs
- NullRuntimeConfig.cs
- hresults.cs
- ValueType.cs
- MasterPageBuildProvider.cs
- XamlSerializer.cs
- HtmlEncodedRawTextWriter.cs
- SolidColorBrush.cs
- Comparer.cs
- CoreSwitches.cs
- EventSourceCreationData.cs
- StorageEntitySetMapping.cs
- ToolBar.cs
- IImplicitResourceProvider.cs