|
現在公開されている情報からは、
単純なコードから徐々に元のコードに復元していって、
何が原因かを探るという手法を提案できるぐらいですね。
とりあえず以下のもっとも単純な形では問題なく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
|