VB.NET では MyApplication イベントを捕捉することで、それぞれのタイミングで処理を行うことができます。
スポンサーリンク
MyApplication イベントの種類
MyApplication イベントの種類と内容を下表にまとめます。
| 種類 | 内容 |
|---|---|
| Startup | アプリケーションが開始されたとき、スタートアップ フォームが作成される前に発生します。 |
| Shutdown | アプリケーション フォームがすべて閉じられた後に発生します。このイベントは、通常の終了以外の方法でアプリケーションが終了されたときには発生しません。 |
| UnhandledException | ハンドルされていない例外がアプリケーションで発生したときに発生するイベントです。 |
| StartupNextInstance | 単一インスタンス アプリケーションが起動され、それが既にアクティブであるときに発生します。 |
| NetworkAvailabilityChanged | ネットワーク接続が接続されたとき、または切断されたときに発生します。 |
ApplicationEvents.vb ファイルの追加手順
MyApplication イベントを補足するには以下の手順で ApplicationEvents.vb ファイルをプロジェクトに追加します。
[プロジェクト]-[プロパティ]-[アプリケーションタブ]-[アプリケーションイベントの表示ボタンクリック]
アプリケーションイベントハンドラの内容
追加された ApplicationEvents.vb に簡単な処理を追加したコードになります。
VB.NET
Namespace My
' 次のイベントは MyApplication に対して利用できます:
'
' Startup: アプリケーションが開始されたとき、スタートアップ フォームが作成される前に発生します。
' Shutdown: アプリケーション フォームがすべて閉じられた後に発生します。このイベントは、通常の終了以外の方法でアプリケーションが終了されたときには発生しません。
' UnhandledException: ハンドルされていない例外がアプリケーションで発生したときに発生するイベントです。
' StartupNextInstance: 単一インスタンス アプリケーションが起動され、それが既にアクティブであるときに発生します。
' NetworkAvailabilityChanged: ネットワーク接続が接続されたとき、または切断されたときに発生します。
Partial Friend Class MyApplication
Private Sub MyApplication_Startup(ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) _
Handles Me.Startup
MessageBox.Show("アプリケーション起動")
End Sub
Private Sub MyApplication_Shutdown(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles Me.Shutdown
MessageBox.Show("アプリケーション終了")
End Sub
Private Sub MyApplication_UnhandledException(ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) _
Handles Me.UnhandledException
MessageBox.Show("例外発生:" + e.Exception.Message)
' 例外発生時には、アプリケーションを終了させる
e.ExitApplication = True
End Sub
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) _
Handles Me.StartupNextInstance
MessageBox.Show("同じアプリケーションが起動された。")
' 起動中のアプリケーションを全面表示する
e.BringToForeground = True
End Sub
Private Sub MyApplication_NetworkAvailabilityChanged(ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs) _
Handles Me.NetworkAvailabilityChanged
If (e.IsNetworkAvailable = True) Then
MessageBox.Show("ネットワークに接続された")
Else
MessageBox.Show("ネットワークが切断された")
End If
End Sub
End Class
End Namespace
注意事項
イベント発生条件に従って動作確認を行えばよいのですが、下記の通り注意すべきことがあります。
1.UnhandledException はデバッグモードでは確認できない
Try ~ Catch で捕捉していない例外が発生した場合には UnhandledException イベントが発生しますが、デバッグモード時はイベントハンドラの呼び出しが行われません。ビルドしたアプリケーション( exe ファイル) を直接起動して動作確認を行う必要があります。
2.VMWare 使用時
VMWare をインストールして仮想サーバーを立てている場合は、仮想サーバーを起動していないときでも、仮想サーバー用のネットワークアダプタが有効となっているとネットワークは常に接続されている状態となりネットワークが切断されたタイミングの NetworkAvailabilityChanged イベントが捕捉できません。仮想サーバー接続用のアダプタを無効にすることでネットワーク接続の変更イベントを補足できるようになります。VMWare に限らず、その他の仮想化ソフトウェアでも同様の事象が発生する可能性はあります。
参考
- My.Application.Startup イベント
- My.Application.Shutdown イベント
- My.Application.UnhandledException イベント
- My.Application.StartupNextInstance イベント
- My.Application.NetworkAvailabilityChanged イベント