private async void button1_Click(object sender, EventArgs e) { listView1.Items.Clear(); this.ct = new CancellationTokenSource(); string path = Dir.Text; int numberOfFiles = 1; if (!Directory.Exists(path)) { listView1.Items.Add(new ListViewItem { Text = "Invalid Directory" }); return; } try { numberOfFiles = Int32.Parse(NumberOfFIles.Text); } catch (Exception) { listView1.Items.Clear(); ListViewItem toAdd = new ListViewItem(); toAdd.Text = "Invalid number."; listView1.Items.Add(toAdd); return; } this.progressTask.Value = 0; listView1.Items.Add(new ListViewItem { Text = "Running... " }); try { ResultParallel res = await Ex2.processDirAsync(path, numberOfFiles, ct.Token, (progress, totalItems) => { SetValue((Int32)((((float)(int)progress) / (float)(int)totalItems) * 100f)); }); listView1.Items.Clear(); listView1.Items.Add(new ListViewItem { Text = "Number of files processed " + res.numberOfFiles }); listView1.Items.AddRange(res.list.ConvertAll <ListViewItem>((item) => { return(new ListViewItem { Text = item }); }).ToArray()); } catch (OperationCanceledException ex) { listView1.Items.Clear(); listView1.Items.Add(new ListViewItem { Text = "Cancelled...." }); } catch (Exception ex) { listView1.Items.Clear(); listView1.Items.Add(new ListViewItem { Text = "Error: " + ex.Message }); } finally { this.ct.Dispose(); } }