Visual Basic 提供了一个定义完善的模型,用于控制 Windows 窗体应用程序的行为:Visual Basic 应用程序模型。 此模型包括用于处理应用程序的启动和关闭的事件,以及用于捕获未经处理的异常的事件。 它还支持开发单实例应用程序。 应用程序模型是可扩展的,因此需要更多控制权的开发人员可以自定义其可重写的方法。
应用程序模型的用途
典型的应用程序需要在启动和关闭时执行任务。 例如,启动时,应用程序可以显示初始屏幕、建立数据库连接、加载已保存状态等。 当应用程序关闭时,它可以关闭数据库连接、保存当前状态等。 此外,应用程序可以在应用程序意外关闭时执行特定代码,例如在未经处理的异常期间。
使用 Visual Basic 应用程序模型可以轻松创建 单实例 应用程序。 单实例应用程序不同于普通应用程序,即一次只能运行应用程序的一个实例。 尝试启动单实例应用程序的另一个实例时,通过 StartupNextInstance
事件通知原始实例,表明已经进行了另一次启动尝试。 通知包括后续实例的命令行参数。 然后,在进行任何初始化之前,关闭应用程序的后续实例。
单实例应用程序启动并检查它是第一个实例还是应用程序的后续实例:
如果它是第一个实例,则它会照常启动。
每次尝试启动应用程序时,当第一个实例运行时,都会产生截然不同的行为。 后续尝试会通知第一个实例有关命令行参数,然后立即退出。 第一个实例处理事件
StartupNextInstance
以确定后续实例的命令行参数是什么,并继续运行。此图显示了后续实例如何向第一个实例发出信号:
通过处理 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)。