次の方法で共有


Visual Basic アプリケーション モデルの概要

Visual Basic には、Windows フォーム アプリケーションの動作を制御するための明確に定義されたモデル (Visual Basic アプリケーション モデル) が用意されています。 このモデルには、アプリケーションの起動とシャットダウンを処理するためのイベントと、ハンドルされない例外をキャッチするためのイベントが含まれます。 また、単一インスタンス アプリケーションの開発のサポートも提供します。 アプリケーション モデルは拡張可能であるため、より多くの制御を必要とする開発者は、オーバーライド可能なメソッドをカスタマイズできます。

アプリケーション モデルの使用

一般的なアプリケーションでは、起動時とシャットダウン時にタスクを実行する必要があります。 たとえば、起動時に、アプリケーションはスプラッシュ画面を表示したり、データベース接続を作成したり、保存された状態を読み込むことができます。 アプリケーションがシャットダウンすると、データベース接続を閉じたり、現在の状態を保存したりできます。 また、アプリケーションは、ハンドルされない例外中など、アプリケーションが予期せずシャットダウンしたときに特定のコードを実行できます。

Visual Basic アプリケーション モデルを使用すると、 単一インスタンス アプリケーションを簡単に作成できます。 単一インスタンス アプリケーションは、一度に実行できるアプリケーションのインスタンスが 1 つだけであるという点で、通常のアプリケーションとは異なります。 単一インスタンス アプリケーションの別のインスタンスを起動しようとすると、 StartupNextInstance イベントによって、別の起動試行が行われたという通知が元のインスタンスに送信されます。 通知には、後続のインスタンスのコマンド ライン引数が含まれます。 その後、初期化が行われる前に、アプリケーションの後続のインスタンスが閉じられます。

単一インスタンス アプリケーションが起動し、アプリケーションの最初のインスタンスか後続のインスタンスかを確認します。

  • 最初のインスタンスの場合は、通常どおりに開始されます。

  • 最初のインスタンスが実行されている間に、後続の各試行でアプリケーションが起動されると、動作が大きく異なります。 後続の試行では、コマンド ライン引数について最初のインスタンスに通知し、すぐに終了します。 最初のインスタンスは、 StartupNextInstance イベントを処理して、後続のインスタンスのコマンドライン引数が何であったかを判断し、引き続き実行します。

    次の図は、後続のインスタンスが最初のインスタンスを通知する方法を示しています。

    1 つのインスタンス アプリケーション イメージを示す図。

StartupNextInstance イベントを処理することで、単一インスタンス アプリケーションの動作を制御できます。 たとえば、Microsoft Outlook は通常、単一インスタンス アプリケーションとして実行されます。Outlook が実行中で、Outlook をもう一度起動しようとすると、フォーカスは元のインスタンスに移動しますが、別のインスタンスは開きません。

アプリケーション モデルのイベント

アプリケーション モデルでは、次のイベントが見つかります。

  • アプリケーションの起動。 アプリケーションは、起動時に Startup イベントを発生させます。 このイベントを処理することで、メイン フォームが読み込まれる前にアプリケーションを初期化するコードを追加できます。 Startup イベントは、必要に応じて、スタートアップ プロセスのそのフェーズ中にアプリケーションの実行を取り消すこともできます。

    アプリケーションのスタートアップ コードの実行中にスプラッシュ画面を表示するようにアプリケーションを構成できます。 既定では、 /nosplash または -nosplash コマンド ライン引数が使用されている場合、アプリケーション モデルはスプラッシュスクリーンを抑制します。

  • 単一インスタンス アプリケーションStartupNextInstance イベントは、単一インスタンス アプリケーションの後続のインスタンスが起動したときに発生します。 イベントは、後続のインスタンスのコマンド ライン引数を渡します。

  • ハンドルされない例外。 アプリケーションでハンドルされない例外が発生すると、 UnhandledException イベントが発生します。 そのイベントのハンドラーは、例外を調べて、実行を続行するかどうかを判断できます。

    状況によっては、 UnhandledException イベントは発生しません。 詳細については、UnhandledExceptionを参照してください。

  • ネットワーク接続の変更。 コンピューターのネットワークの可用性が変更された場合、アプリケーションは NetworkAvailabilityChanged イベントを発生させます。

    状況によっては、 NetworkAvailabilityChanged イベントは発生しません。 詳細については、NetworkAvailabilityChangedを参照してください。

  • アプリケーションがシャットダウンしました。 アプリケーションは、シャットダウンしようとしているときに通知する Shutdown イベントを提供します。 そのイベント ハンドラーでは、アプリケーションで実行する必要がある操作 (閉じる操作や保存操作など) が完了していることを確認できます。 メイン フォームが閉じたときにシャットダウンするか、すべてのフォームが閉じたときにのみシャットダウンするようにアプリケーションを構成できます。

可用性

既定では、Visual Basic アプリケーション モデルは Windows フォーム プロジェクトで使用できます。 別のスタートアップ オブジェクトを使用するようにアプリケーションを構成する場合、またはカスタム Sub Mainを使用してアプリケーション コードを開始する場合、そのオブジェクトまたはクラスは、アプリケーション モデルを使用するために WindowsFormsApplicationBase クラスの実装を提供する必要がある場合があります。 スタートアップ オブジェクトの変更の詳細については、「 アプリケーション ページ、プロジェクト デザイナー (Visual Basic)」を参照してください。

こちらも参照ください