2014-04-04 70 views
0

我有一個WPF應用程序,其中此應用程序中的任務之一將打印需要一點時間的telerik報告。ProgressBar與WPF中的BackgroundWorker

我已經通過使用BackgroundWorker解決了屏幕凍結問題,但是我想在ProgressBar中顯示打印過程,我已經閱讀了一些示例,但是他們都討論了FOR循環並將整數傳遞給ProgressBar,與我的情況。

如果可能,我該怎麼做?

這裏是我的BackgroundWorker的DoWork:

void _printWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     _receiptReport = new Receipt(_invoice.InvoiceID, _invoice.ItemsinInvoice.Count); 
     printerSettings = new System.Drawing.Printing.PrinterSettings(); 
     standardPrintController = new System.Drawing.Printing.StandardPrintController(); 
     reportProcessor = new Telerik.Reporting.Processing.ReportProcessor(); 
     reportProcessor.PrintController = standardPrintController; 
     instanceReportSource = new Telerik.Reporting.InstanceReportSource(); 
     instanceReportSource.ReportDocument = _receiptReport; 
     reportProcessor.PrintReport(instanceReportSource, printerSettings); 
    } 

在此先感謝

+0

如果您不傳遞一個設置進度百分比的int值,ProgressBar會如何顯示進度? – failedprogramming

+0

我的問題是如何在我的情況傳遞int? –

回答

3

當你定義BackgroundWorker,可以報告進度:

worker.WorkerReportsProgress = true; 
worker.ProgressChanged += _printWorker_ProgressChanged; 

添加ProgressBar到你的窗口。設置Maximum到然而,許多「更新」要舉報:

<ProgressBar x:Name="ProgressBar1" Maximum="8" /> 

通過BackgroundWorker.ReportProgress方法再增加ProgressBarValue,每一行代碼後,你DoWork事件:

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

您還需要在致電RunWorkerAsync()之前使ProgressBar可見,然後將其隱藏在RunWorkerCompleted事件中。

+0

謝謝,這就是我要找的:) –

1

你必須有對ProgressChanged事件爲背景工人的事件處理程序。但是,您需要將某個號碼傳遞給該事件以指示完成百分比,否則對於更新進度欄並不很有用。

我的建議是隻有一個動畫gif或東西來向用戶表明該應用程序目前正在工作。

+0

謝謝@Chris你的時間,我認爲你的建議是做我想做的事的好方法,我會試試' –

+0

或者你可以將ProgessBar.IsIndeterminate設置爲true。 – metacircle