public void PerformCommand(IUndoCommand command) { if (performingCommandSequence) { commandSequence.PerformCommand(command); } else { try { command.Perform(); index++; commands.Insert(index, command); if (index < capacity && commands.Count > index + 1) { commands.RemoveRange(index + 1, commands.Count - (index + 1)); } if (commands.Count > capacity) { commands.RemoveRange(0, commands.Count - capacity); } CommandPerformed?.Invoke(this, new EventArgs()); } catch (Exception ex) { HandleError(command, ex); } } }
public void Redo() { if (index + 1 == commands.Count) { return; } IUndoCommand command = commands.ElementAt(index + 1); try { command.Perform(); index++; CommandPerformed?.Invoke(this, new EventArgs()); } catch (Exception ex) { HandleError(command, ex); } }