예제 #1
0
        /// <summary>
        /// Requests that the following action be completed as soon as reasonably possible.
        /// This will either be done immediately, or be queued for the next approriate time.
        /// </summary>
        /// <param name="callback">action to perform</param>
        /// <returns>
        /// A cancelation object. Use in a using block.
        /// </returns>
        public CallbackRequest RequestCallback(Action callback)
        {
            CallbackRequest request = new CallbackRequest(callback);

            lock (m_syncRoot)
            {
                m_isRequestCallbackMethodProcessing = true;
                Thread.MemoryBarrier();
                //------------------------------------------
                if (m_isSafeToCallback)
                {
                    request.Run();
                }
                else
                {
                    m_isCallbackWaiting = true;
                    m_pendingCallbacks.Add(request);
                }
                //-----------------------------------------
                Thread.MemoryBarrier();
                m_isRequestCallbackMethodProcessing = false;
            }

            return(request);
        }
        /// <summary>
        /// Requests that the following action be completed as soon as reasonably possible. 
        /// This will either be done immediately, or be queued for the next approriate time.
        /// </summary>
        /// <param name="callback">action to perform</param>
        /// <returns>
        /// A cancelation object. Use in a using block.
        /// </returns>
        public CallbackRequest RequestCallback(Action callback)
        {
            CallbackRequest request = new CallbackRequest(callback);

            lock (m_syncRoot)
            {
                m_isRequestCallbackMethodProcessing = true;
                Thread.MemoryBarrier();
                //------------------------------------------
                if (m_isSafeToCallback)
                {
                    request.Run();
                }
                else
                {
                    m_isCallbackWaiting = true;
                    m_pendingCallbacks.Add(request);
                }
                //-----------------------------------------
                Thread.MemoryBarrier();
                m_isRequestCallbackMethodProcessing = false;
            }

            return request;
        }