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