BackgroundWorker
reportProgress事件的处理方式如下(此示例来自MSDN
http://msdn.microsoft.com/en-us/library/cc221403(VS.95).aspx
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()