【问题标题】:Background worker doesnt report progress in wpf [duplicate]后台工作人员不报告 wpf 的进度 [重复]
【发布时间】:2012-10-11 06:59:34
【问题描述】:

可能重复:
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.
    }

【问题讨论】:

标签: wpf progress-bar backgroundworker 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.
}

【讨论】:

  • 是的。我确实错过了,但我怎么知道“百分比”值。 backgroundWorker 应该知道操作的状态。如果我写 bworker.ReportProgress(10)。它只是在任务完成后将 ProgressBar 的值更新为 10 和 100。我想继续更新它的价值。任何想法如何做到这一点
  • 这完全取决于你在 _doWork 方法中所做的事情。如果您希望有一个相对的 ProgressBar,您应该尝试尽可能地划分您的耗时任务。如果您的 bworker_doWork 方法中有一个 for 循环,您始终可以将当前迭代次数除以总迭代次数乘以 100 以获得进度百分比。例如,假设您正在迭代一组对象并用它们做一些事情。您的进度将是:int progress = currentIteration/objects.Count*100;
猜你喜欢
  • 2010-10-25
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多