private void DispatchThreadMain(object obj) { ("Dispatch Thread Starting: " + Thread.CurrentThread.Name).Log(); try { if (_extension == null) { ("Extension Not Loaded, Dispatch Runtime Aborting").Log(); } else { _extension.OnLoad((IMubox)obj); while (!_exitYet.WaitOne(50)) // 20fps { dynamic command = default(dynamic); while (_dispatchQueue.TryDequeue(out command)) { switch ((string)command.Instruction) { case "STOP": _exitYet.Set(); break; default: break; } } } _extension.OnUnload(); } } finally { ("Dispatch Thread \"" + Thread.CurrentThread.Name + "\" Stopping").Log(); _shutdownYet.Set(); } }