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