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? >>>>> >>>>> } >>>>> } >>>>> }>>>>>