2つのプログレスバーと1つのバックグラウンドワーカーを持つシンプルなフォームがあります。私は2つのループ(1つは他のものの中にある)を持っています。そして、私は増分した各ループの進捗状況を報告したいと思います。BackgroundWorkerで2つのプログレスバーのうち1つだけが更新されます
private void buttonStart_Click(object sender, EventArgs e)
{
workerCustomers.RunWorkerAsync();
}
private void workerCustomers_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
progressBar2.Value = (int)e.UserState;
}
private void workerCustomers_DoWork(object sender, DoWorkEventArgs e)
{
for (int customer = 0; customer < 50; customer++)
{
int customerPercentage = ++customer * 100/50;
workerCustomers.ReportProgress(customerPercentage, 0);
for (int location = 0; location < 500; location++)
{
int locationPercentage = ++location * 100/500;
workerCustomers.ReportProgress(customerPercentage, locationPercentage);
}
workerCustomers.ReportProgress(customerPercentage, 0);
}
}
プログラムが実行されると、progressbar1は正常に更新されますが、progressbar2は決して移動しません。デバッガを介して実行すると、progressbar2の値が変更されていることがわかります。変化はありません。何か案は?
プログレスバーの最大値は正しく設定されていますか? –
@lc。はい、デフォルトでは100に設定されていますが、2回目のループカウンタの合計が500になるように変更しました。 – Robert
500のループは非常に高速になります。それは更新されているようには見えないかもしれません。内側のループにThread.Sleep()を追加してみて、それが本当に素早く起こっているかどうかを見てみてください。 –