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

わんくま同盟

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

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

■90486 / 3階層)  集約例外メソッドでラッピングした例外を取得できない
□投稿者/ Hongliang (767回)-(2019/03/14(Thu) 11:30:12)
現在公開されている情報からは、
単純なコードから徐々に元のコードに復元していって、
何が原因かを探るという手法を提案できるぐらいですね。

とりあえず以下のもっとも単純な形では問題なくLogExceptionが表示されました。
(Windows 10 ver.1809, 対象フレームワーク:.NET 4.5.2および.NET 3.5)

1. 新しくWindows Formsのプロジェクトを作成する
2. Programという名前でモジュールを追加して、後述のコードを記述
3. Form1にボタンを1つ配置し、後述のコードを記述
4. プロジェクトのプロパティでアプリケーションフレームワーク有効のチェックを外し
 スタートアップオブジェクトをProgramに変更

ちなみにアプリケーションフレームワーク有効のまま、
ThreadExceptionへのAddHandlerをForm1_Loadに移動させても
問題ありませんでした。


Program.vb ------------------------------
Imports System.IO
Imports System.Text
Imports System.Threading

Module Program
    <STAThread>
    Public Sub Main()
        AddHandler Application.ThreadException, AddressOf Application_ThreadException
        Application.Run(New Form1())
    End Sub

    Public Sub Application_ThreadException(sender As Object, e As ThreadExceptionEventArgs)

        If TypeOf e.Exception Is Log_Exception Then
            MessageBox.Show("LogException")
        Else
            MessageBox.Show(e.Exception.ToString())
        End If
        Application.Exit()
    End Sub
End Module
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 Class Log
    Public Sub Write_Log(ByVal _Log As String)
        Using writer As StreamWriter = Get_Stream()
            writer.WriteLine(_Log)
        End Using
    End Sub
    Public Const LogPath As String = "F:\OCR\Documents\log.txt"
    Private Function Get_Stream() As StreamWriter
        Try
            Return New StreamWriter(LogPath, True, Encoding.GetEncoding("shift_jis"))
        Catch ex As IOException
            Throw New Log_Exception("ログファイルオープン時エラー発生", ex)
        End Try
    End Function
End Class

Form1.vb --------------------------------
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Using writer As New IO.StreamWriter(Log.LogPath)
            Dim log As New Log
            log.Write_Log("test")
        End Using
    End Sub
End Class

編集キー/

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

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

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