準備
(なし)
デザイン
- フォーム (Form1) にテキストボックス (textBox1) を配置します。
サンプルコード (C#)
Class1.cs
using System.Text; namespace WinFormsApp1 { static class Class1 { static public void AppException(object sender, System.Threading.ThreadExceptionEventArgs e) { var vsMessage = new StringBuilder(); vsMessage.AppendLine("アプリケーションアクセス中に致命的なエラーが発生しました。"); vsMessage.AppendLine(e.Exception.Message); vsMessage.AppendLine(""); vsMessage.AppendLine("----- イベント -----"); if (e.Exception.TargetSite is not null) { vsMessage.AppendLine(e.Exception.TargetSite.ToString()); } vsMessage.AppendLine(""); vsMessage.AppendLine("----- トレース情報 -----"); vsMessage.AppendLine(e.Exception.StackTrace); MessageBox.Show(vsMessage.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Stop); string vsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string vsFileName = $@"{vsPath}\ErrorLog{DateTime.Now:yyyyMMdd_HHmmss}.log"; using (var sw = new StreamWriter(vsFileName)) sw.WriteLine(vsMessage.ToString()); Application.Exit(); } } }
Program.cs
namespace WinFormsApp1 { using static Class1; internal static class Program { [STAThread] static void Main() { Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(AppException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }
Form1.cs
namespace WinFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { int x = 100; int y = 0; int z = x / y; } } }
解説
アプリケーション実行時にクラッシュした場合は、通常はシステム固有のダイアログが表示されます。この場合、単にクラッシュして終わりです。アプリケーション例外を補足する処置を実行しておくと、任意のメッセージを表示させ、そのログを保存させることができます。
まず、Class1 で、AppException メソッドを作成します。アプリケーション例外が発生した際、このメソッドがコールされます。
Main メソッドで、アプリケーション例外が発生した際、AppException メソッドがコールされるよう設定します。
Form1 の button1 イベントが発生した際、0 で除算する箇所でアプリケーション例外が発生し、AppException メソッドがコールされます。
結果
実行時エラー(通常の場合)
実行時エラー(アプリケーション例外を補足した場合)
動作確認環境
Visual Studio 2022 Professional (.NET8 C#12)
ログ
初版:2024.03.05 Visual Studio 2015 Professional (C# 6.0)