- PR -

backgroundworker使用時の画面フリーズ

1
投稿者投稿内容
あいこ
会議室デビュー日: 2007/01/25
投稿数: 1
投稿日時: 2007-01-25 09:25
いつも参考にさせていただいております。

現在VB2005による開発をしています。
Timer起動によるバックグラウンドタスクが3つほどあるため、
BackgroundWorkerの使用を検討し、練習のために簡単なプログラムを組んでみました。
スタート、キャンセル、プログレスバーのみの簡単な画面を作り、
BackgroundWorkerのDoWorkイベントから別関数「BigJob」(=重い処理)を呼ぶ、
単純なプログラムです。

作成したプログラムを動かしてみたところ、BigJob 関数の内容によって、画面がフリーズしてしまい、キャンセルがきかなくなってしまうのです。
具体的には、以下のとおりです。

Private Function BigJob(ByVal worker As BackgroundWorker, ByVal e As DoWorkEventArgs) As Long
'実際の時間のかかる処理

'↓↓↓こちらの処理だとフリーズする
'(プログレスバーは正常に表示され、BigJob終了後にキャンセルが受け付けられる)

'Dim ctr, x As Integer
'For ctr = 1 To 100000
' If worker.CancellationPending Then
' e.Cancel = True
' Exit For
' Else
' x = ctr
' worker.ReportProgress(ctr / 100000 * 100)
' End If
'Next

'↓↓↓こちらの処理だとUI操作を受け付ける
For i As Integer = 1 To 100

System.Threading.Thread.Sleep(100)

If worker.CancellationPending Then
e.Cancel = True
Exit For
Else
Dim percentage As Integer = i * 100 / 100 ' 進ちょく率
sw.WriteLine(e.Argument & ":" & CStr(percentage) & " %")
worker.ReportProgress(percentage)
' ProgressChangedイベント発生
End If
Next
Return 0
End Function


決定的な思い違いがあるのでしょうか。
何か理由をご存知の方がいらっしゃったら、ご教示をお願いいたします。

1

スキルアップ/キャリアアップ(JOB@IT)