Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }