VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
バックグラウンド処理が終了すると、RunWorkerCompletedイベントが発生します。(このイベントは、バックグラウンド処理が正常終了、例外発生時、バックグラウンド処理のキャンセル時のいずれかで発生します)
イベントのe.errorがNothing以外は例外が発生したことを示し、e.CancelledプロパティがTrueの場合はバックグラウンド処理がキャンセルされたことを示します。
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '進捗状況を報告できるようにする Me.BackgroundWorker1.WorkerReportsProgress = True 'バックグラウンド操作をキャンセルできるようにする Me.BackgroundWorker1.WorkerSupportsCancellation = True 'プログレスバーの初期化 Me.ProgressBar1.Minimum = 0 Me.ProgressBar1.Maximum = 100 End Sub 'バックグランド処理実行用ボタンクリック時の処理 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '進捗状況の初期化 Me.ProgressBar1.Value = 0 'バックグラウンド操作の実行を開始する Me.BackgroundWorker1.RunWorkerAsync() End Sub 'バックグランドキャンセル用ボタンクリック時の処理 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If Me.BackgroundWorker1.IsBusy Then 'バックグランド処理をキャンセルする Me.BackgroundWorker1.CancelAsync() End If End Sub Private Sub BackgroundWorker1_DoWork( _ ByVal sender As Object, _ ByVal e As System.ComponentModel.DoWorkEventArgs) _ Handles BackgroundWorker1.DoWork For I As Integer = 0 To 100 '処理中にキャンセルされていないかを定期的にチェックする If Me.BackgroundWorker1.CancellationPending Then e.Cancel = True Return End If '進捗状況の報告 Me.BackgroundWorker1.ReportProgress(I) If I = 50 Then 'わざと例外を発生させる Throw New ApplicationException("例外発生") End If System.Threading.Thread.Sleep(100) Next End Sub 'バックグラウンド操作の進捗状況を把握 Private Sub BackgroundWorker1_ProgressChanged( _ ByVal sender As System.Object, _ ByVal e As System.ComponentModel.ProgressChangedEventArgs) _ Handles BackgroundWorker1.ProgressChanged '進捗状況をプログレスバーに表示 Me.ProgressBar1.Value = e.ProgressPercentage End Sub 'バックグラウンド処理の終了を判断する Private Sub BackgroundWorker1_RunWorkerCompleted( _ ByVal sender As System.Object, _ ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _ Handles BackgroundWorker1.RunWorkerCompleted If Not (e.Error Is Nothing) Then MessageBox.Show("例外が発生しました") ElseIf e.Cancelled Then MessageBox.Show("キャンセルされました") Else MessageBox.Show("正常終了しました") End If End Sub