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