2013-11-01 57 views
0

我有一种方法可用于从服务器下载文件。我的方法工作正常,但是我想返回在每个执行实例中执行的进程的计算百分比。我试图使用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返回进度,它仍然没有启动。任何帮助,将不胜感激。

+0

您必须从bw_DoWork方法调用BackgroundWorker.ReportProgress方法 – AirL

回答

0

您需要从DoWork方法中调用ReportProgress以及precentage的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); 
} 
0

如在本official tutorial从MSDN说明。您必须在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%(等等)时你才知道。