[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:

コメント