MonitorWrapper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Utility / MonitorWrapper.cs / 1305600 / 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;
                } 
                GC.SuppressFinalize(this);
            }
            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;
                } 
                GC.SuppressFinalize(this);
            }
            private MonitorWrapper _monitorWrapper;
        } 
    }
} 
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK