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(); >> }>>
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); >> }>>
>> /// <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? >> >> } >> } >> }>>