/// <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); }
/// <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) { } }