Tôi có một biểu mẫu đơn giản với 2 thanh tiến trình và 1 backgroundworker trên đó. Tôi có 2 vòng lặp (một cái khác) và tôi muốn báo cáo lại tiến trình của mỗi vòng lặp một lần tăng lên. Đây là mã tôi có:Chỉ 1 trong 2 thanh tiến trình được cập nhật trong BackgroundWorker
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);
}
}
Khi chương trình chạy, progressbar1 được cập nhật tốt, nhưng progressbar2 không bao giờ di chuyển. Nếu tôi chạy nó thông qua trình gỡ lỗi, tôi có thể thấy giá trị của progressbar2 đang được thay đổi, không có thay đổi đồ họa. Bất kỳ ý tưởng?
Giá trị tối đa của thanh tiến trình có được đặt đúng không? –
@lc., Vâng, theo mặc định, nó được đặt thành 100 nhưng tôi đã thay đổi để khớp với tổng số vòng lặp 2 là 500. – Robert
Vòng lặp 500 sẽ hoạt động rất nhanh. Nó có thể không xuất hiện để được cập nhật. Hãy thử thêm một Thread.Sleep() vào vòng lặp bên trong và xem nếu nó thực sự chỉ xảy ra quá nhanh để bạn có thể nhìn thấy. –