public override async Task ExecuteAsynchronously(object parameter) { var vm = (MainWindowViewModel)parameter; Func <IProgress <int>, CancellationToken, Task <int> > loadFilesAction = ((progress, token) => MatchInvoices(vm.Aging, vm.Tolerance, vm.SelectedRegions.Keys.ToArray(), vm.Progress, token)); CancellationTokenSource timerTokenSource = new CancellationTokenSource(); Execution = new NotifyTaskCompletion <int>(loadFilesAction(vm.Progress, new CancellationToken())); RaiseCanExecuteChanged(); await Execution.TaskCompletion; RaiseCanExecuteChanged(); int d = Execution.Result; }
public override async Task ExecuteAsynchronously(object parameter) { var vm = (MainWindowViewModel)parameter; Func <IProgress <int>, CancellationToken, Task <int> > loadFilesAction = ((progress, token) => LoadFiles(vm.DailyReportFilePath, vm.UnallocatedCashReportFilePath, progress, token)); CancellationTokenSource timerTokenSource = new CancellationTokenSource(); Action <IProgress <int>, CancellationToken> action2 = ((progress, token) => ProgressUpdateByTime(progress, token)); Task timerTask = Task.Run(() => action2(vm.Progress, timerTokenSource.Token), timerTokenSource.Token); Execution = new NotifyTaskCompletion <int>(loadFilesAction(vm.Progress, new CancellationToken())); RaiseCanExecuteChanged(); await Execution.TaskCompletion; timerTokenSource.Cancel(); timerTask.Wait(); RaiseCanExecuteChanged(); int d = Execution.Result; }