When you define your BackgroundWorker
, enable reporting progress:
worker.WorkerReportsProgress = true;
worker.ProgressChanged += _printWorker_ProgressChanged;
Add a ProgressBar
to your window. Set the Maximum
to however many "updates" you want to report:
<ProgressBar x:Name="ProgressBar1" Maximum="8" />
Then increase the Value
of the ProgressBar
via the BackgroundWorker.ReportProgress
method, after each line of code in your DoWork
event:
void _printWorker_DoWork(object sender, DoWorkEventArgs e)
{
var worker = (BackgroundWorker)sender;
worker.ReportProgress(0);
_receiptReport = new Receipt(_invoice.InvoiceID, _invoice.ItemsinInvoice.Count);
worker.ReportProgress(1);
printerSettings = new System.Drawing.Printing.PrinterSettings();
...
...
worker.ReportProgress(6);
instanceReportSource.ReportDocument = _receiptReport;
worker.ReportProgress(7);
reportProcessor.PrintReport(instanceReportSource, printerSettings);
worker.ReportProgress(8);
}
private void _printWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
ProgressBar1.Value = e.ProgressPercentage;
}
You'll also need to make the ProgressBar
visible prior to calling RunWorkerAsync()
, then hide it in the RunWorkerCompleted
event.