Visual Basic 應用程式模型概觀

更新:2007 年 11 月

Visual Basic 會提供妥善定義的模型,用於控制 Windows Form 應用程式的行為:Visual Basic 應用程式模型。此模型會包含用於處理應用程式啟動與關閉的事件,以及用於攔截未處理之例外狀況的事件。它也支援開發單一執行個體應用程式。應用程式模型是可延伸的,因此需要更多控制的開發人員可以自訂此模型的覆寫方法。

用於應用程式模型

應用程式通常需要在它啟動或關閉時執行工作。例如,在啟動應用程式時,顯示啟動顯示畫面、與資料庫連線、載入儲存狀態等等。當應用程式關閉時,會關閉資料庫連線、儲存目前的狀態等等。此外,應用程式還會在應用程式意外關閉時 (例如,在未處理的例外狀況期間) 執行特定的程式碼。

Visual Basic 應用程式模型讓建立「單一執行個體」應用程式的工作變得更容易。單一執行個體應用程式與正常應用程式不同的地方是,它一次只能執行一個應用程式執行個體。如果嘗試啟動單一執行個體應用程式的另一個執行個體,則會利用 StartupNextInstance 事件通知原始的執行個體,告知已嘗試另一個啟動作業。此通知會包含後續執行個體的命令列引數。然後,應用程式的後續執行個體會在發生任何初始設定之前關閉。

單一執行個體應用程式會啟動,並檢查它是第一個執行個體,還是應用程式的後續執行個體:

  • 如果是第一個執行個體,則照例啟動它。

  • 當第一個執行個體執行時,要啟動應用程式的每一個後續嘗試都會有不同的行為。後續嘗試會通知第一個執行個體相關的命令列引數,然後立刻結束。第一個執行個體會處理 StartupNextInstance 事件,判斷後續執行個體的命令列引數為何,再繼續執行。

    本圖表會顯示後續執行個體如何通知第一個執行個體。

    單一執行個體應用程式影像

藉由處理 StartupNextInstance 事件,您可以控制單一執行個體應用程式行為表現的方式。例如,Microsoft Outlook 通常會以單一執行個體應用程式執行,當 Outlook 正在執行時,若您嘗試重新啟動 Outlook,焦點便會轉移到原始的執行個體,但不會開啟另一個執行個體。

應用程式模型中的事件

下列事件可以在應用程式模型中找到:

  • 應用程式啟動:應用程式會在它啟動時引發 Startup 事件。藉由處理此事件,您可以在載入主要表單之前加入初始化應用程式的程式碼。Startup 事件也會視需要在啟動處理序的階段期間取消應用程式的執行。

    您可以設定應用程式在應用程式啟動程式碼執行時顯示啟動顯示畫面。根據預設,應用程式模型會在使用 /nosplash 或 -nosplash 命令列引數時隱藏啟動顯示畫面。

  • 單一執行個體應用程式:單一執行個體應用程式的後續執行個體啟動時,會引發 StartupNextInstance 事件。事件會傳遞後續執行個體的命令列引數。

  • 未處理的例外狀況:如果應用程式遇到未處理的例外狀況,它會引發 UnhandledException 事件。該事件的處理常式會檢查例外狀況,並判斷是否要繼續執行。

    在某些情況下不會引發 UnhandledException 事件。如需詳細資訊,請參閱 My.Application.UnhandledException 事件

  • 網路連接變更:如果電腦的網路連接變更,應用程式會引發 NetworkAvailabilityChanged 事件。

    在某些情況下不會引發 NetworkAvailabilityChanged 事件。如需詳細資訊,請參閱 My.Application.NetworkAvailabilityChanged 事件

  • 應用程式關閉:應用程式會提供 Shutdown 事件,在它即將關閉時送出信號。在該事件處理常式中,您可以確定應用程式需要執行的作業 (例如,關閉與儲存) 已完成。您可以設定應用程式在主要表單關閉時關閉,或是只在所有表單都關閉時才關閉。

可用性

根據預設,Visual Basic 應用程式模型可供 Windows Form 專案使用。如果您設定應用程式會使用不同的啟始物件,或是以自訂的 Sub Main 啟動應用程式的程式碼,那麼物件或類別可能需要提供 WindowsFormsApplicationBase 類別的實作,以使用應用程式模型。如需變更啟始物件的詳細資訊,請參閱 HOW TO:變更應用程式的啟始物件 (Visual Basic)

請參閱

概念

擴充 Visual Basic 應用程式模型

參考

My.Application 物件

My.Application.Startup 事件

My.Application.StartupNextInstance 事件

My.Application.UnhandledException 事件

My.Application.Shutdown 事件

My.Application.NetworkAvailabilityChanged 事件

WindowsFormsApplicationBase