|
ありがとうございます。 以下の通り試してみましたが、結果、同じでした
ちなみに panel1.Visible = false; 行を削除すれば最後まで表示されたものが出る(出っぱなしになる)のですが panel1.Visible = falseのタイミングがわかりませんでした。
//Button1のClickイベントハンドラ private void Button1_Click(object sender, System.EventArgs e) { //処理が行われているときは、何もしない if(BackgroundWorker1.IsBusy) return;
//Button1を無効にする Button1.Enabled = false;
//コントロールを初期化する ProgressBar1.Minimum = 0; ProgressBar1.Maximum = 100000; ProgressBar1.Value = 0; panel1.Visible = true; panel1.Update();
//BackgroundWorkerのProgressChangedイベントが発生するようにする BackgroundWorker1.WorkerReportsProgress = true; //DoWorkで取得できるパラメータ(10)を指定して、処理を開始する //パラメータが必要なければ省略できる BackgroundWorker1.RunWorkerAsync(10); }
//BackgroundWorker1のDoWorkイベントハンドラ private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker bgWorker = (BackgroundWorker)sender;
//パラメータを取得する int maxLoops = (int)e.Argument;
//時間のかかる処理を開始する
//ProgressChangedイベントハンドラを呼び出し、コントロールの表示を変更する for(int i = 0; i < 100000; i++) bgWorker.ReportProgress(i);
//ProgressChangedで取得できる結果を設定する結果が必要なければ省略できる e.Result = maxLoops; }
//BackgroundWorker1のProgressChangedイベントハンドラ private void BackgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { //ProgressBar1の値を変更する ProgressBar1.Value = e.ProgressPercentage; }
//BackgroundWorker1のRunWorkerCompletedイベントハンドラ//処理が終わったときに呼び出される private void BackgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if(e.Error != null) { MessageBox.Show("エラー:" + e.Error.Message); } else { //正常に終了したとき結果を取得する int result = (int)e.Result; } //Button1を有効に戻す Button1.Enabled = true; panel1.Visible = false; }
|