[ VB.NET ] MyApplication イベントを捕捉 ( Startup, Shutdown, UnhandledException, StartupNextInstance, NetworkAvailabilityChanged )

Pocket

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 に限らず、その他の仮想化ソフトウェアでも同様の事象が発生する可能性はあります。

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *