Exemplo n.º 1
0
        /// <summary>
        /// método llamado por la hebra correspondiente del pool
        /// </summary>
        /// <param name="state"></param>
        /// <returns></returns>
        public object RaiseEventByThreadPool(object state)
        {
            QueueEntry p = null;

            try
            {
                numHandledEvents++;

                p = state as QueueEntry;

                if (p != null)
                {
                    ThreadLocalEvent tle = (ThreadLocalEvent)p.message.threadLocalEvent;
                    tle.SetCurrentThread();
                    localNode.ResumeRouting(p.message);
                }
            }
            catch (OutOfMemoryException) { }
            catch (ThreadAbortException) { }
            catch (Exception) { }
            finally
            {
                try
                {
                    if (p != null)
                    {
                        p.message.threadLocalEvent.IsCompleted = true;
                        p.message = null;
                    }
                }
                catch { }
            }
            return(null);
        }
Exemplo n.º 2
0
        /// <summary>
        /// This is the main method of the Overlay thread. It reads messages from the
        /// MessageQueue and processes them.
        /// </summary>
        public void EventLoop()
        {
            try
            {
                while (!exit)
                {
                    QueueEntry p = queue.Remove();
                    if (p != null)
                    {
                        ThreadLocalEvent tle = new ThreadLocalEvent();
                        p.message.threadLocalEvent = tle;

                        IWorkItemResult result = m_STP.QueueWorkItem(
                            new WorkItemCallback(RaiseEventByThreadPool), p);

                        tle.WorkItemResult = result;
                    }
                }
            }
            catch (ObjectDisposedException) { }
        }