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 :-{