0

プログレス バーが終了する前に 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();
    }
4

1 に答える 1