[ad#ad-336×280]
バックグラウンド操作を実行するとき(RunWorkerAsyncメソッド実行時)にはパラメーターを渡すことができます。
RunWorkerAsyncメソッドの引数に値を渡すと、バックグラウンド操作(DoWorkイベント)のe.Argumentプロパティで受け取ることができます。
下記は、バックグランド操作にパラメーターを渡す例です。
RunWorkerAsyncメソッドに100を渡して、DoWorkイベントで受け取り、ループの最大値として使用しています。
VBの例
' [START]ボタンクリック時の処理 Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click ' [START]ボタンを無効にする btnStart.Enabled = False '進捗状況の報告をできるようにする BackgroundWorker1.WorkerReportsProgress = True 'バックグラウンド処理を開始する(パラメーターとして100を渡す) BackgroundWorker1.RunWorkerAsync(100) End Sub ' 時間のかかる処理を実行する Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork '★★★受け取ったパラメータをループの最大値にする★★★ Dim iLoopMax As Integer = CInt(e.Argument) For I As Integer = 1 To iLoopMax '200mSecスリープさせる System.Threading.Thread.Sleep(200) 'ProgressChangedイベントを発生させる BackgroundWorker1.ReportProgress(I) Next End Sub ' 進捗状況を更新する Private Sub BackgroundWorker1_ProgressChanged(sender As System.Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged 'プログレスバーを進捗させる ProgressBar1.Value = e.ProgressPercentage End Sub ' バックグラウンド処理完了時の処理 Private Sub BackgroundWorker1_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted 'バックグラウンド処理が完了したので[START]ボタンを有効にする btnStart.Enabled = True End Sub
C#の例
// [START]ボタンクリック時の処理 private void btnStart_Click(object sender, EventArgs e) { // [START]ボタンを無効にする btnStart.Enabled = false; // 進捗状況の報告をできるようにする backgroundWorker1.WorkerReportsProgress = true; // ★★★バックグラウンド処理を開始する(パラメーターとして100を渡す)★★★ backgroundWorker1.RunWorkerAsync(100); } // 時間のかかる処理を実行する private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { // ★★★受け取ったパラメータをループの最大値にする★★★ int iLoopMax = (int)e.Argument; for (int i = 0; i < iLoopMax; i++) { // 200mSecスリープさせる System.Threading.Thread.Sleep(200); // ProgressChangedイベントを発生させる backgroundWorker1.ReportProgress(i + 1); } } // 進捗状況を更新する private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { // プログレスバーを進捗させる progressBar1.Value = e.ProgressPercentage; } // バックグラウンド処理完了時の処理 private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // バックグラウンド処理が完了したので[START]ボタンを有効にする btnStart.Enabled = true; }
Please follow and like us:
コメント