System.Threading.OverlappedDataCache.GetOverlappedData C# (CSharp) Method

GetOverlappedData() static private method

static private GetOverlappedData ( Overlapped overlapped ) : OverlappedData
overlapped Overlapped
return OverlappedData
        internal static OverlappedData GetOverlappedData(Overlapped overlapped)
        {
            OverlappedData overlappedData = null;

            Interlocked.Exchange(ref m_overlappedDataCacheAccessed, 1);

            while (true)
            {
                OverlappedDataCacheLine walk = m_overlappedDataCache;
                while (null != walk)
                {
                    for (short i = 0; i < OverlappedDataCacheLine.CacheSize; i ++)
                    {
                        if (walk.m_items[i] != null)
                        {
                            overlappedData = Interlocked.Exchange<OverlappedData>(ref walk.m_items[i], null);
                            if (overlappedData != null)
                            {
                                overlappedData.m_overlapped = overlapped;
                                return overlappedData;
                            }
                        }
                    }

                    walk = walk.m_next;
                }

                GrowOverlappedDataCache();
            }

            /*
            Interlocked.Increment(ref m_Total);
            Console.WriteLine("OverlappedDataCache get " + m_Total +
                              " create " + m_Create +
                              " Cache " + m_Cache);
            */
        }

Usage Example

 public Overlapped(int offsetLo, int offsetHi, IntPtr hEvent, IAsyncResult ar)
 {
     m_overlappedData = OverlappedDataCache.GetOverlappedData(this);
     m_overlappedData.m_nativeOverlapped.OffsetLow  = offsetLo;
     m_overlappedData.m_nativeOverlapped.OffsetHigh = offsetHi;
     m_overlappedData.UserHandle    = hEvent;
     m_overlappedData.m_asyncResult = ar;
 }
All Usage Examples Of System.Threading.OverlappedDataCache::GetOverlappedData