public void Run(Func<bool> workFunc) { SynchronizationContext oldSyncCtx = null; try { oldSyncCtx = SynchronizationContext.Current; var syncCtx = new GameSyncContext(this); SynchronizationContext.SetSynchronizationContext(syncCtx); bool again = true; while (m_exit == false) { if (!again) m_signal.WaitOne(); again = false; KeyValuePair<SendOrPostCallback, object> entry; if (m_queue.TryDequeue(out entry)) { entry.Key(entry.Value); again |= m_queue.Count > 0; } again |= workFunc(); } } finally { SynchronizationContext.SetSynchronizationContext(oldSyncCtx); } }
public void Run(Func <bool> workFunc) { SynchronizationContext oldSyncCtx = null; try { oldSyncCtx = SynchronizationContext.Current; var syncCtx = new GameSyncContext(this); SynchronizationContext.SetSynchronizationContext(syncCtx); bool again = true; while (m_exit == false) { if (!again) { m_signal.WaitOne(); } again = false; KeyValuePair <SendOrPostCallback, object> entry; if (m_queue.TryDequeue(out entry)) { entry.Key(entry.Value); again |= m_queue.Count > 0; } again |= workFunc(); } } finally { SynchronizationContext.SetSynchronizationContext(oldSyncCtx); } }