在幾乎所有的reportProgress事件也被類似處理的BackgroundWorker
教程(這個例子是從MSDN http://msdn.microsoft.com/en-us/library/cc221403(VS.95).aspx)BackgroundWorker.ReportProgress令人困惑的例子?
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; (i <= 10); i++)
{
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
// Perform a time consuming operation and report progress.
// _results.Load() downloads XML and save the data to database
System.Threading.Thread.Sleep(500);
worker.ReportProgress((i * 10));
}
}
}
我的功能下載XML和解析後,將它保存到數據庫中。我在下面調用了這個函數「//執行耗時的操作並報告進度。」但是我的函數不會運行10次嗎?
後來我修改了Load()添加到變量CountTotal(結果總數)和CountLoaded(保存的結果數量,它隨着函數的進展而變化)。
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; (i <= 10); i++)
{
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
// Perform a time consuming operation and report progress.
_results.Load() downloads XML and save the data to database
worker.ReportProgress((_results.CountLoaded * 10)); //i did something like this
}
}
}
的問題是,worker.ReportProgress
的_results.Load()
完成後執行。如何解決這個問題呢?互聯網上給出的例子是否真的很糟糕,因爲他們建議在循環中調用函數,或者我弄錯了它們?
謝謝,花了很多時間後。正如你所說的,我用了大框。但有沒有什麼辦法可以使用CountTotal和CountLoaded來報告進度條上的進度? – SMUsamaShah 2010-06-21 23:00:15
@ LifeJ20 - 如果發生事件或類似事件,可能會在保存後觸發。 – 2010-06-21 23:07:36
我可以製作另一個BackgroudWorker來監控Count.Loaded – SMUsamaShah 2010-06-21 23:09:20