Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- ValueProviderWrapper.cs
- SystemIcons.cs
- StylusButton.cs
- WebServiceHost.cs
- DocumentViewerAutomationPeer.cs
- InvalidEnumArgumentException.cs
- SafeFindHandle.cs
- DataGridViewColumnTypePicker.cs
- XmlReflectionMember.cs
- AttachedPropertyMethodSelector.cs
- COAUTHINFO.cs
- FileDataSourceCache.cs
- DesignBindingPicker.cs
- RtfToXamlReader.cs
- DataFieldEditor.cs
- FormViewActionList.cs
- RadioButtonFlatAdapter.cs
- SubclassTypeValidator.cs
- AxisAngleRotation3D.cs
- CodeSubDirectoriesCollection.cs
- DataObjectSettingDataEventArgs.cs
- OdbcCommand.cs
- UiaCoreTypesApi.cs
- ISO2022Encoding.cs
- VersionedStreamOwner.cs
- MdiWindowListStrip.cs
- OleDbMetaDataFactory.cs
- TextMetrics.cs
- DataColumnPropertyDescriptor.cs
- FloaterBaseParaClient.cs
- Literal.cs
- Misc.cs
- DbCommandTree.cs
- SrgsElementFactory.cs
- ContractAdapter.cs
- IxmlLineInfo.cs
- CardSpaceException.cs
- PointValueSerializer.cs
- HttpCookieCollection.cs
- DotExpr.cs
- XpsS0ValidatingLoader.cs
- ReceiveActivityDesigner.cs
- DataMemberFieldEditor.cs
- TableLayout.cs
- RuntimeConfigLKG.cs
- XmlWriterTraceListener.cs
- ClientCredentialsElement.cs
- DetailsViewPageEventArgs.cs
- SQLInt32.cs
- XPathDocument.cs
- HMACMD5.cs
- XmlCharCheckingReader.cs
- BindingMAnagerBase.cs
- XmlSerializationGeneratedCode.cs
- StrongNameKeyPair.cs
- RSAOAEPKeyExchangeDeformatter.cs
- TypeForwardedToAttribute.cs
- SessionStateUtil.cs
- UnsafeNativeMethods.cs
- DataBoundControl.cs
- TemplateBuilder.cs
- ReaderWriterLock.cs
- ExclusiveNamedPipeTransportManager.cs
- ValidationEventArgs.cs
- DSGeneratorProblem.cs
- AutomationPatternInfo.cs
- Popup.cs
- SliderAutomationPeer.cs
- MailAddress.cs
- ChameleonKey.cs
- SortKey.cs
- StylusDevice.cs
- TheQuery.cs
- XmlNamespaceDeclarationsAttribute.cs
- DataObjectPastingEventArgs.cs
- GrowingArray.cs
- NumberSubstitution.cs
- PoisonMessageException.cs
- DragEvent.cs
- Token.cs
- DbConnectionStringCommon.cs
- KeyValueInternalCollection.cs
- ActivityInstanceMap.cs
- _NtlmClient.cs
- ActiveXHelper.cs
- InlineObject.cs
- _HelperAsyncResults.cs
- MemberNameValidator.cs
- ReflectionTypeLoadException.cs
- QueryAccessibilityHelpEvent.cs
- BuildProvider.cs
- RoleService.cs
- XmlSchemaImporter.cs
- GridViewSelectEventArgs.cs
- VarInfo.cs
- Rotation3D.cs
- FixedSOMTextRun.cs
- CookielessData.cs
- TcpTransportElement.cs
- XmlNamespaceMappingCollection.cs