【问题标题】:How to check the process progress using background worker如何使用后台工作人员检查进程进度
【发布时间】:2013-11-01 10:14:16
【问题描述】:

我有一种从服务器下载文件的方法。我的方法工作正常,但是我想在每个执行实例中返回计算出的进程执行百分比。我尝试使用 backgroundworker 并为我的进度条使用 backgroundworker_changed 方法,如下所示。

  bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;
            bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

点击按钮启动工作器。

private void btnStart_Click(object sender, EventArgs e)
        {


                if (bw.IsBusy != true)
                {

                    bw.RunWorkerAsync();

                }

        }

worker_changed 方法

 private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar.Value = e.ProcessPercentage;
        }

我的问题是,我知道我必须报告 DoWork() 方法的进度。请问我该如何实现?我想过做这样的事情。

  private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar.Value = Convert.ToInt32( e.UserState );

        }

它仍然没有触发,因为 DoWork 没有返回任何进度。任何帮助,将不胜感激。

【问题讨论】:

  • 你必须从你的 bw_DoWork 方法调用 BackgroundWorker.ReportProgress 方法

标签: c# progress-bar backgroundworker


【解决方案1】:

您需要从您的 DoWork 方法中调用 ReportProgress 以及百分比 int 值。

例如:

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
     //you can safely pass data out of the thread via the 'obj'
     bw.ReportProgress(0, obj); 
}

【讨论】:

    【解决方案2】:

    正如来自 msdn 的 official tutorial 中所述。您必须在 DoWork 方法中自行报告进度更改。这是一个例子:

    private void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;
    
        worker.ReportProgress(10/*the percentage you want*/);
    }
    

    BackgroundWorker.ProgressChanged 事件:

    在您调用 ReportProgress 方法时引发

    它的设计目的是:

    添加代码以指示进度,例如更新用户 界面。

    BackgroundWorker.RunWorkerCompleted 事件:

    在后台操作完成、已取消时发生, 或引发了异常

    当您的DoWork 方法失败、结束或调用ReportProgress 方法时,这两个事件都将被调用。所以换句话说,我们可以说你是决定它们何时发生的人。没有您的行动就无法完成,这是您的过程,只有您知道它何时完成 20%、30% 或 100%(等等...)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2012-06-11
      • 1970-01-01
      • 2022-06-11
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多