private void btnEmail_Click(object sender, RoutedEventArgs e) { this.BackgroundWorker = new BackgroundWorker(); this.BackgroundWorker.WorkerReportsProgress = true; this.BackgroundWorker.DoWork += new DoWorkEventHandler(this.EmailQueueBackgroundWorker_DoWork); this.BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(this.BackgroundWorker_ProgressChanged); this.progressBar.Maximum = 100; this.progressBar.Minimum = 0; //// Start the Asynch Worker this.BackgroundWorker.RunWorkerAsync(); }This code calls the process to go through the list after first building up a list of Primary Keys of the emails to be sent:
private void EmailQueueBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { // Create the process object in worker thread EmailQueueProcess emailQueue = new EmailQueueProcess(); // register the handler emailQueue.ProcessStateChange += new ProcessStateChangeEventHandler(SendEmail_ProcessStateChange); // build the list of Primary Keys to process DataTable emailQueuePKs = this.BuildEmailQueuePKsDataTable(); // Kick off the process emailQueue.ProcessQueue(emailQueuePKs); }The supporting code for updating the progress bar:
/// <summary> /// State change handler for the business process /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SendEmail_ProcessStateChange(object sender, ProcessStateChangeEventArgs e) { if (e.ProcessState == ProcessState.ProgressChanged) { this.BackgroundWorker.ReportProgress(e.ProgressPercentage, e); } } /// <summary> /// progress changed handler for the asynch call back of the backround worker /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { ProcessStateChangeEventArgs businessStateArgs = e.UserState as ProcessStateChangeEventArgs; if (businessStateArgs != null) { // Check e.ProcessState enum and the percentage here and set the status bar appropriately if (businessStateArgs.ProcessState == ProcessState.ProgressChanged) { this.progressBar.Value = e.ProgressPercentage; // can I update the datatable being displayed in the grid? } } }Is there a way for me to hook into this code to update the datagrid to display the updated values?