C# BackgroundWorker.ReportProgress有哪些令人困惑的示例?

C# BackgroundWorker.ReportProgress有哪些令人困惑的示例?,c#,.net,backgroundworker,C#,.net,Backgroundworker,在几乎所有的BackgroundWorker教程中,reportProgress事件都是这样处理的(此示例来自MSDN) private void bw\u DoWork(对象发送方,DoWorkEventArgs e) { BackgroundWorker worker=发件人作为BackgroundWorker; 对于(int i=1;(iYes)-这将执行Load10次。该示例的目的是说明当您可以估计总体工作负载或报告有意义的进度时的用法。他们只是试图模拟带有进度指示的“某些工作” 如果您

在几乎所有的
BackgroundWorker
教程中,reportProgress事件都是这样处理的(此示例来自MSDN)

private void bw\u DoWork(对象发送方,DoWorkEventArgs e)
{
BackgroundWorker worker=发件人作为BackgroundWorker;

对于(int i=1;(iYes)-这将执行
Load
10次。该示例的目的是说明当您可以估计总体工作负载或报告有意义的进度时的用法。他们只是试图模拟带有进度指示的“某些工作”


如果您不能这样做,那么就异步运行它(通过
BackgroundWorker
)但是显示一个滚动的无限字幕或类似的。不要做10次;p或者,运行
Load
,然后在处理数据时报告进度。假设这需要一些时间。如果所有时间都在
Load
,那么…

谢谢,花了很多时间。我按照你说的使用了字幕。但是有什么方法可以使用CountTot吗al和CountLoaded在进度条中报告进度?@LifeJ20-如果保存后触发事件或类似事件,可能。我可以让另一个BackgroundWorker监视计数吗。Loaded@LifeH20-可能吧,但你正处在一个复杂的交叉数据区。要想正确处理这个问题非常困难。
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));
    }
  }
}
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
    }
  }
}