C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■90478 / 親階層)  集約例外メソッドでラッピングした例外を取得できない
□投稿者/ 卵 (1回)-(2019/03/13(Wed) 20:39:58)

分類:[.NET 全般] 

Visual Basic2012を使用しています。
集約例外ハンドラを使っているのですが、思うように例外を受け取れていません。
ログファイルをオープンする際に例外が発生した場合に、ログ出力をしたくないので
下記のようにコードを書きました。

メインクラス
<STAThread> _
Public Shared Sub Main()
    AddHandler Application.ThreadException, _
        AddressOf Application_ThreadException

    Application.Run(New Form1())
End Sub

Private Shared Sub Application_ThreadException(sender As Object, _
        e As System.Threading.ThreadExceptionEventArgs)

        If TypeOf e.Exception Is Log_Exception Then   @
             'メッセージ表示のみ
        Else
             'メッセージ表示してログ出力
        End If
    
        'アプリケーション終了
        Application.Exit()
    
End Sub

ログ例外クラス
Public Class Log_Exception
        Inherits Exception
        'これの他、メッセージのみ、引数なしのコンストラクタを定義しています
        Public Sub New(ByVal errorMessage As String,ByVal _InnerException as  Exception)
                MyBase.New(errorMessage,_InnerException)
        End Sub
End Class

ログ出力クラス
Public sub Write_Log(ByVal _Log As String)
        Dim stream As IO.StreamWriter = Get_Stream
        stream.WriteLine(_Log)
End sub

Private Function Get_Stream() As IO.StreamWriter
         Try
                Return New IO.StreamWriter("ログファイルパス",True,System.Text.Encoding.GetEncoding("shift_jis"))
         Catch ex As IOException 
                 Throw New Log_Exception("ログファイルオープン時エラー発生",ex)    A
         End Try
End Function



ログファイルを別のアプリケーションで開いたままにすると
一応Aの後に@には来るんですけど、中を見るとIOExceptionになっているため、
If判定しても意味がないという状態になっています。
もうAでメッセージを出してアプリケーション終了させようかなと思ったのですが、
何故上手くいかないのかが気になって仕方ないです。
ちなみにメッセージのみ、または引数なしでLog_Exceptionを生成すると、何故かうまくいきます。
InnerExceptionがあるときだけ、おかしくなります。
AのLog_ExceptionをExceptionクラスに変えて試しましたが、
やはりInnerExceptionがあると@の時点でe.ExceptionがIOExceptionになっています。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: 集約例外メソッドでラッピングした例外を取得できない /Azulean
 
上記関連ツリー

集約例外メソッドでラッピングした例外を取得できない / 卵 (19/03/13(Wed) 20:39) #90478 ←Now
Re[1]: 集約例外メソッドでラッピングした例外を取得できない / Azulean (19/03/13(Wed) 23:29) #90479
  └ Re[2]: 集約例外メソッドでラッピングした例外を取得できない / 卵 (19/03/14(Thu) 09:32) #90483
    └ Re[3]: 集約例外メソッドでラッピングした例外を取得できない / Hongliang (19/03/14(Thu) 11:30) #90486
      └ Re[4]: 集約例外メソッドでラッピングした例外を取得できない / 卵 (19/03/14(Thu) 21:05) #90494
        └ Re[5]: 集約例外メソッドでラッピングした例外を取得できない / Hongliang (19/03/14(Thu) 21:20) #90495

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信