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