Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }