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