private void ProcessNextCommand(CommandBase command) { if (command == null) { // TODO - log return; } var mre = new ManualResetEvent(false); _configuration.UiDispatcher.BeginInvoke( () => { command.Configuration = _configuration; command.Do(); mre.Set(); }); mre.WaitOne(); if (command is NullCommand) { Thread.Sleep(NullCommandSleepTimeoutInMilliseconds); return; } }
public void Do(CommandBase com) { MyGame.DebugAlert(DebugMode.Commands, "Doing " + com.ToString(MyGame)); if (!(com is CommandGroup)) { UndoStack.Push(com); } com.Do(MyGame); if (!SuspendViewUpdates) { com.UpdateViews(MyGame); } if (triggerOnCommandTypes.Contains(com.GetType()) && !IsLoading) { MyGame.MyTriggerHandler.GatherTriggers(com); } CommandPerformed?.Invoke(com); }