private void BtnTask_OnClick(object sender, RoutedEventArgs e) > { > btnTask.IsEnabled = btnEmail.IsEnabled = false; > txtInfo.Text = string.Empty; > > //Dummy list of Primary Keys > var emailPKs = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; > progressBar.Maximum = emailPKs.Count; > progressBar.Minimum = 0; > > List<Task> tasks = new List<Task>(); > var ui = TaskScheduler.FromCurrentSynchronizationContext(); > > foreach (var id in emailPKs) > { > var send = Task.Factory.StartNew(() => > { > return SendEmail(id); > }); > tasks.Add(send); > > var display = send.ContinueWith(result => > { > txtInfo.Text += String.Format("Email to {0} - {1}{2}", send.Result.EmailId, > send.Result.Status.ToString(), Environment.NewLine); > progressBar.Value++ ; > }, ui) > ; > } > > > Task.Factory.ContinueWhenAll(tasks.ToArray(), result => > { > txtInfo.Text += "Complete." + Environment.NewLine; > btnTask.IsEnabled = btnEmail.IsEnabled = true; > progressBar.Value = progressBar.Maximum; > }, CancellationToken.None, TaskContinuationOptions.None, ui); > > }>Snag is SMTP (if that's what you are using) may not be able to handle being hit from all directions :-{