2012-10-11 102 views
-1

可能重複:
Backgroundworker won’t report progress後臺工作犯規報告進度

我使用背景工人在WPF。問題在於它不報告進度。它只是在完成任務時更新ProgressBar。我想在後臺任務運行時定期更新它。這是我的示例代碼。

bworker_doWork(...) 
    { 
     BindData();//this is database operation which binds data to datagrid. 
    } 

    bWorker_ProgressChanged(...) 
    { 
     progressBar.Value=e.ProgressPercentage;//it doesnt update this value 
    } 

    bWorker_RunWorkerCompleted(..) 
    { 
     progressBar.Value=100;//max value. control comes here and updates the progress to max value. 
    } 
+0

你在哪裏設置ProgressPercentage?你能提供更多的代碼嗎? – Marcus

+0

您必須在代碼中的某處調用ReportProgress。看看這個問題。 http://stackoverflow.com/questions/854548/backgroundworker-wont-report-progress –

回答

-1

您是否將ProgressPercentage設置在任何位置? (不知道你提交的代碼)

我認爲你錯過了,你必須在你的代碼中調用ReportProgress;作爲這樣的:

myBackgroundWorker.ReportProgress((int)percent, null); 

我在你的代碼想這將是這個樣子:

bworker_doWork(...) 
{ 
    BindData();//this is database operation which binds data to datagrid. 
    bworker.ReportProgress((int)percent); 
} 

bWorker_ProgressChanged(...) 
{ 
    progressBar.Value=e.ProgressPercentage;//it doesnt update this value 
} 

bWorker_RunWorkerCompleted(..) 
{ 
    progressBar.Value=100;//max value. control comes here and updates the progress to max value. 
} 
+0

是的。我確實想念它,但我怎麼知道「百分比」值。 backgroundWorker應該知道操作的狀態。如果我寫bworker.ReportProgress(10)。只要任務完成,它就會將ProgressBar的值更新爲10和100。我想繼續更新它的價值。任何想法如何做到這一點 – Mujeeb

+0

這一切都取決於你在_doWork方法中做了什麼。如果你希望有一個可靠的ProgressBar,你應該儘可能地分開你的耗時任務。如果您在bworker_doWork方法中有for循環,則可以始終將當前迭代次數與總迭代次數相乘,得到進度的百分比。例如,我們假設您正在迭代一組對象並對它們進行一些操作。你的進度將是: int progress = currentIteration/objects.Count * 100; – Marcus