private void __LowPriorityThread() { try { while (true) { m_lowBlocker.Reset(); while (m_lowQueue.Count == 0 || m_normalQueue.Count > 0) { m_lowBlocker.WaitOne(); } if (m_lowQueue.Count > 0) { InvokeHelperBase helper = m_lowQueue.Dequeue(); if (helper != null) { helper.Invoke(Priority.Low); helper.FreeArguments(); } } } } catch (ThreadAbortException) { // exit gracefully } }
public void EnqueueEvent(InvokeHelperBase invokee) { m_normalQueue.Enqueue(invokee); m_normalBlocker.Set(); m_lowQueue.Enqueue(invokee); }