を使用してプログレスバーを進めようとしていBackgroundWorker
ます。最終的な目標は身元調査の進行状況を表示することですが、最初に簡単なシミュレーションを実行して進行状況バーを知りたいと思います。これはコードです:
public MainWindow()
{
InitializeComponent();
worker = new BackgroundWorker(); // variable declared in the class
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Title += " DONE";
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
for(int j = 0; j <= 100; j++)
{
worker.ReportProgress(j);
Title += j.ToString();
Thread.Sleep(50);
}
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
searchProgressBar.Value = e.ProgressPercentage;
}
しかし、実行すると、プログレスバーを変更せずに最後までスキップします。ステップバイステップでデバッグすると、最後のステップはですworker.ReportProgress(j);
。その後、controlはプログラムに戻り、worker_RunWorkerCompleted
呼び出されます。なんで?