/// <summary> /// Don't use semaphore /// </summary> /// <param name="undo"></param> /// <param name="redo"></param> public UndoRedoNoParametersCommand NewCommand(string name, Action undo, Action redo) { var command = new UndoRedoNoParametersCommand(undo, redo, Guid.NewGuid().ToString(), name); ////UndoRedoDropoutStack.LastCommandAdded = command; _UndoCommands.Push(command); _RedoCommands.Clear(); return(command); }
/// <summary> /// Use semaphore.WaitAsync /// </summary> /// <param name="undo"></param> /// <param name="redo"></param> public async Task <UndoRedoNoParametersCommand> NewAsyncCommandAsync(string name, Func <Task> undo, Func <Task> redo) { var token = _CTS.Token; await _Semaphore.WaitAsync(); if (token.IsCancellationRequested) { return(null); } var command = new UndoRedoNoParametersCommand(undo, redo, Guid.NewGuid().ToString(), name); //UndoRedoDropoutStack.LastCommandAdded = command; if (token.IsCancellationRequested) { return(null); } _UndoCommands.Push(command); _RedoCommands.Clear(); _Semaphore.Release(); return(command); }