private static void DeleteFiles(IEnumerable<Redistributables> redistributables, ProgressBar progressBar,
            DialogSession dialogSession)
        {
            Task.Factory.StartNew(() =>
            {
                var failures = new List<string>();

                foreach (var item in redistributables.Select((red, idx) => new {red, idx}))
                {
                    progressBar.Dispatcher.BeginInvoke(new Action(() => progressBar.Value = item.idx));
                    try
                    {
                        if (File.Exists(item.red.Path))
                            File.Delete(item.red.Path);
                    }
                    catch
                    {
                        failures.Add(item.red.Path);
                    }
                }

                if (failures.Count > 0)
                    progressBar.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        var failuresDialog = new FailuresDialog {FailuresListBox = {ItemsSource = failures}};
                        dialogSession.UpdateContent(failuresDialog);
                    }));
                else
                    progressBar.Dispatcher.BeginInvoke(new Action(dialogSession.Close));
            });
        }
 private async void StartCleaning(ProgressBar progressBar, DialogSession session)
 {
     var callback =
         new Progress<int>(
             i => { progressBar.Dispatcher.BeginInvoke(new Action(() => { progressBar.Value = i; })); });
     var result = await cleanerService.CleanAsync(currentResult, callback);
     if (result.Failures.Count > 0)
         await progressBar.Dispatcher.BeginInvoke(new Action(() =>
         {
             var failuresDialog = new FailuresDialog {FailuresListBox = {ItemsSource = result.Failures}};
             session.UpdateContent(failuresDialog);
         }));
     else
         await progressBar.Dispatcher.BeginInvoke(new Action(session.Close));
     CanRefresh = true;
     await RunRefresh();
 }