2016-11-27 11 views
0

進行状況のパーセント値をラベルに表示しようとしています.Im Aproxを追加しています。 25Kの行をDataTableに追加します。 Label.Textをe.ProgressPercentageに設定するとうまく動作します。私は%値を計算するときしかし、それはあなたが最も可能性がゼロになり、整数で整数を割るいる計算された進捗率が更新されない

   progressCount = report.Rows.Count; 
       foreach (DataRow r in report.Rows) 
       { 

         rp.pName = r[1].ToString(); 
         rp.batch = r[2].ToString(); 
         rp.expr = r[3].ToString(); 
         rp.stock = r[5].ToString(); 
         rp.rate = r[6].ToString(); 
         backgroundWorker2.ReportProgress(i, rp); 
         System.Threading.Thread.Sleep(2); 
         if(backgroundWorker2.CancellationPending) 
         { 
          e.Cancel = true; 
          backgroundWorker2.ReportProgress(0); 
         } 
         i++; 

       } 



private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     metroProgressBar1.Minimum = 0; 
     metroProgressBar1.Maximum = progressCount; 
     stock st = new stock(); 
     reportClass rp = (reportClass)e.UserState; 
     if(!backgroundWorker2.CancellationPending) 
     { 
      st.stockReport.Rows.Add(rp.pName, rp.batch, rp.expr, rp.stock, rp.rate); 
      metroProgressBar1.Value = e.ProgressPercentage; 
      int percn = (e.ProgressPercentage/progressCount) * 100; 
      metroLabel4.Text =percn.ToString(); 
     } 
    } 
+0

おそらくイベントを登録しませんでした:backgroundWorker2.ProgressChanged + =新しいProgressChangedEventHandler(backgroundWorker2_ProgressChanged)。 – jdweng

答えて

3

100%に労働者のラベルの更新が完了した後にsame.Only残ります。値を最初に倍精度にキャストし、計算してから結果をintにキャストします。

変更:

int percn = (e.ProgressPercentage/progressCount) * 100; 

へ:

int percn = (int)(((double)e.ProgressPercentage/(double)progressCount) * 100); 
関連する問題