掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
BackgroundWorkerでRunWorkerCompletedが発生しない (ID:147380)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
マルチスレッドの処理を実行したいと思っています。 サンプルで以下のようなコードを作ったのですが、DoWork終了後にRunWorkerCompletedが発生しません。 コントロールはフォームにテキストボックスとボタンを配置しています。 ------ここから------ Public Class Form1 Private PI_Cnt As Short Private PB_Cancel As Boolean Private PB_End As Boolean Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim DI_Clc As Short '処理が行われているときは、何もしない If BackgroundWorker1.IsBusy Then Return End If PB_End = False PI_Cnt = 0 PB_Cancel = False BackgroundWorker1.RunWorkerAsync(TextBox1.Text) DI_Clc = fnMain() Do If BackgroundWorker1.IsBusy = False Then Exit Do End If Loop MessageBox.Show(DI_Clc + PI_Cnt) End Sub Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork ' BackgroundWorkerの取得(スレッドを作成したオブジェクト) Dim objWorker As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker) Dim DI_Cnt As Short Dim DS_String As String DS_String = e.Argument For DI_Cnt01 As Short = 1 To Val(DS_String) System.Threading.Thread.Sleep(50) DI_Cnt += 1 Next e.Result = DI_Cnt End Sub Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted ' 最初に、例外がスローされた場合の処理 If Not (e.Error Is Nothing) Then MessageBox.Show(e.Error.Message) ElseIf e.Cancelled Then ' 次に、ユーザーが計算をキャンセルした場合の処理 PB_Cancel = True Else ' 正常に完了した場合の処理 PB_Cancel = False End If PI_Cnt = e.Result End Sub Private Function fnMain() As Short Dim DI_Cnt As Short Dim DI_Calc As Short For DI_Cnt = 1 To 50 System.Threading.Thread.Sleep(50) DI_Calc += 1 Next Return DI_Calc End Function End Class ------ここまで------ 「If BackgroundWorker1.IsBusy = False Then」の部分でFalseが帰ってこないので永久にループし続けます。 なぜRunWorkerCompletedが発生しないのでしょうか? 開発はVisualStudio2008です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.