- - PR -
backgroundworker使用時の画面フリーズ
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