在几乎所有的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