private void RunThread() { try { ReplayRenderer renderer = CreateReplayRenderer(); if (renderer != null) { System.Diagnostics.Debug.WriteLine("Renderer created"); Running = true; m_current = null; while (Running) { lock (m_renderQueue) { if (m_renderQueue.Count > 0) { m_current = m_renderQueue[0]; m_renderQueue.RemoveAt(0); } } if (m_current == null) { m_WakeupEvent.WaitOne(10); continue; } if (m_current.method != null) { if (CatchExceptions) { try { m_current.method(renderer); } catch (Exception ex) { m_current.ex = ex; } } else { m_current.method(renderer); } } m_current.processed = true; m_current = null; } lock (m_renderQueue) { foreach (var cmd in m_renderQueue) { cmd.processed = true; } m_renderQueue.Clear(); } DestroyReplayRenderer(renderer); } } catch (ReplayCreateException ex) { InitException = ex; } }