0

プログレスバーは70になります。バーが動かないのは、ループが始まったときに更新しようとしたときです。

int count = finalFiles.Length; //finalFiles in an array and it varies in size.
int current = 0;

private void uploadWorker_DoWork(object sender, DoWorkEventArgs e)
{  
      uploadWorker.ReportProgress(20);

      DoSomeWork();

      uploadWorker.ReportProgress(50);

      DoMoreWork();

      uploadWorker.ReportProgress(70);

      foreach (string file in finalFiles)
      {
           current++; 
           doProcess();
           uploadWorker.ReportProgress(current / count * 30 + 70);
      }
}

繰り返しになりますが、問題は、進行状況バーが70に達すると更新されないことです。それは、移動しないだけです。ちなみに、バックグラウンドワーカーを使用しているため、フォームがロックされません。

誰かがそれがなぜであるか知っていますか?

4

3 に答える 3

1

integer currentinteger がありcountます。の方が大きいので、割り算をするとに達するcountまで常に 0 (整数割り算)になります。除算を行う前に、 /を作成するか、2 つのうちの 1 つを/にキャストする必要があります。currentcurrentcountdoubledecimaldoubledecimal

于 2012-08-28T14:52:40.227 に答える
0

何が何をするのかわかりませんが、 foreachdoProcess()をインクリメントすべきではありませんか?current

于 2012-08-28T14:48:31.560 に答える
0

たとえば、どこかに括弧が必要なようです

 foreach (string file in finalFiles)
      {
           doProcess();
           uploadWorker.ReportProgress( ((current / count) * 30) + 70);
      }

OK、あなたが必要とする数学はわかりません (申し訳ありませんが、私はここで別のことをしている最中です)。しかし、問題になる可能性があるように見えるので、計算に括弧を入れることをお勧めします。

于 2012-08-28T14:49:19.087 に答える