tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルRunWorkerCompleted イベントで e.Error が Nothing 以外になるケース
記事No6310
投稿日: 2007/09/14(Fri) 13:17
投稿者楽太郎

環境 : Visual Basic 2005

BackgroundWorker1_RunWorkerCompleted イベントで
e.Error が Nothing でないケースってどのような場合でしょうか?

私はてっきり BackgroundWorker1_DoWork イベント内でエラーが発生した場合に
e.Error にエラー内容がセットされるのかと思っていたのですが・・・

フォーム上にボタンを1つ配置して、下のコードを実行すると
Throw ex で処理が止まってしまいます・・・
かといって、 Throw ex を取り除くと、エラーが発生していても
e.Error は Nothing になります。

e.Error が Nothing 以外になるケースってどのような場合ですか?


Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
                        ByVal e As System.EventArgs) Handles Button1.Click
        BackgroundWorker1.RunWorkerAsync()
    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, _
                        ByVal e As System.ComponentModel.DoWorkEventArgs) _
                        Handles BackgroundWorker1.DoWork
        Try
            ' わざとエラーを発生
            Throw New Exception("手動で発生させたエラー")
        Catch ex As Exception
            Debug.Print(ex.Message)
            Throw ex
        End Try
    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
            ' ここに入るケースってどういう場合?
            MsgBox("エラーが発生しました。")
        Else
            MsgBox("処理が完了しました")
        End If
    End Sub
End Class

[ツリー表示へ]
タイトルRe: RunWorkerCompleted イベントで e.Error が Nothing 以外になるケース
記事No6312
投稿日: 2007/09/14(Fri) 13:35
投稿者魔界の仮面弁士
> フォーム上にボタンを1つ配置して、下のコードを実行すると
> Throw ex で処理が止まってしまいます・・・

exe 単体での実行だったら、止まらずに RunWorkerCompleted にて処理されますよね。

また、開発環境から実行した場合であっても、Throw での停止後に処理を続行させれば、
そのまま RunWorkerCompleted にて再処理されるはず。

[ツリー表示へ]
タイトル[解決] Re^2: RunWorkerCompleted イベントで e.Error が Nothing 以外になるケース
記事No6313
投稿日: 2007/09/14(Fri) 16:20
投稿者楽太郎
!!!!!
ホントだっ^^;

e.Error が Nothing でないケースが再現できました。

BackgroundWorker1_DoWork で
エラーが発生して(エラーを発生させて)
BackgroundWorker1_RunWorkerCompleted に
飛ばそうとした場合、開発環境では
必ず一旦止まってしまうものなのですね・・・

ありがとうございました。

[ツリー表示へ]
タイトルRe: [解決] Re^2: RunWorkerCompleted イベントで e.Error が Nothing 以外になるケース
記事No6314
投稿日: 2007/09/14(Fri) 18:00
投稿者魔界の仮面弁士
> 開発環境では必ず一旦止まってしまうものなのですね・・・

や。そんな事は無いですよ。

中断される例外については、[デバッグ(D)] - [例外(X)...] の例外ダイアログで
調整できますし、今回の場合でいえば、[ツール(T)] - [オプション(O)...] の
{デバッグ}/{全般}/{'マイ コードのみ' 設定を有効にする} でも制御できます。

[ツリー表示へ]