準備
(なし)
デザイン
- フォーム (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)

