1. はじめに
- WindowsFormアプリケーションを終了する時に処理する内容をまとめて記述したい
- アプリの終了のパターンによって動作する、しないを把握しておきたい
2. 開発環境
- C#
- .Net6
- Visual Studio 2022
- Window 11
3. サンプルプログラム
3.1. フォーム
- CloseMainFormボタン
- 単純にフォームを閉じる
- ApplicationExitボタン
- Application.RunメソッドをExitする
- EnvironmentExitボタン
- フォーム起動前にアプリを閉じる
3.2. プログラムソース
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
//ApplicationExitイベントハンドラを追加
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
}
private void CloseMainFormButton_Click(object sender, EventArgs e)
{
// フォームを閉じる
this.Close();
}
public void Application_ApplicationExit(object sender, EventArgs e)
{
MessageBox.Show("アプリケーションが終了されました");
//ApplicationExitイベントハンドラを削除
Application.ApplicationExit -= new EventHandler(Application_ApplicationExit);
}
private void ApplicationExitButton_Click(object sender, EventArgs e)
{
//Application.RunメソッドをExitする
Application.Exit();
}
private void EnvironmentExitButton_Click(object sender, EventArgs e)
{
//アプリケーションの強制終了
Environment.Exit(0);
}
}
- FormのコンストラクタでApplication.ApplicationExitイベントを使用することでアプリケーション終了を知ることができる
4. 動作確認
4.1. CloseMainFormボタン
4.2. ApplicationExitボタン
4.3. EnvironmentExitボタン
- ×
Application_ApplicationExit
メソッドが呼び出されない
4.4. ヘッダーの閉じるボタン
5. 結論
- Application.ApplicationExitイベントでアプリケーション終了を通知する場合、アプリケーションの強制終了(
Environment.Exit(0)
)は通知されないため注意する - Application.RunメソッドをExitする場合、メッセージボックスの表示がわからない現象が発生するため注意する
6. 参考文献