2013-11-01 89 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%(等等)時你才知道。