プログレス バーが終了する前に RunWorkerCompleted が実際に UI を更新し、textBox1 テキストが "Done" になる理由を知りたいです。なぜこうなった?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
Thread.Sleep(10);
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
textBox1.Text = "Done";
}
私が使用する場合
for (int i = 1; i <= 100; i++)
{
Thread.Sleep(20);
backgroundWorker1.ReportProgress(i);
MessageBox.Show(i.ToString());
}
それは私が期待することをします
以下でこれを試すと、テキストボックスは期待どおりに更新されますが、プログレスバーは更新されません
public void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
textBox1.Text = e.ProgressPercentage.ToString();
progressBar1.Refresh();
}