扩展 Visual Basic 应用程序模型

通过重写 Overridable 类的 WindowsFormsApplicationBase 成员,可以向应用程序模型添加功能。 使用此方法可以自定义应用程序模型的行为,并在应用程序启动和关闭时添加对自己的方法的调用。

应用程序模型的视觉概述

本部分直观显示 Visual Basic 应用程序模型中的函数调用序列。 下一部分详细介绍了每个函数的用途。

下图显示了普通 Visual Basic Windows 窗体应用程序中的应用程序模型调用顺序。 当Sub Main过程调用Run方法时,序列将开始。

显示应用模型调用顺序的图表。

Visual Basic 应用程序模型还提供 StartupNextInstanceUnhandledException 事件。 下图显示了引发这些事件的机制。

显示 OnStartupNextInstance 方法引发 StartupNextInstance 事件的图。

显示引发 UnhandledException 事件的 OnUnhandledException 方法的关系图。

重写基方法

该方法 Run 定义方法运行的顺序 Application 。 默认情况下,Windows 窗体应用程序的 Sub Main 过程会调用 Run 方法。

如果应用程序是普通应用程序(多实例应用程序)或单实例应用程序的第一个实例,则 Run 该方法按以下顺序执行 Overridable 这些方法:

  1. OnInitialize。 默认情况下,此方法为主应用程序线程设置视觉风格、文本显示风格和当前主要身份(如果应用程序使用 Windows 身份验证),如果命令行参数中未使用ShowSplashScreen/nosplash,则调用-nosplash

    如果此函数返回 False,则会取消应用程序启动序列。 如果在某些情况下,应用程序不应运行,这非常有用。

    该方法 OnInitialize 调用以下方法:

    1. ShowSplashScreen。 确定应用程序是否定义了初始屏幕,如果定义了初始屏幕,则会在单独的线程上显示初始屏幕。

      方法ShowSplashScreen 包含的代码用于显示启动屏幕,显示时间至少是MinimumSplashScreenDisplayTime属性指定的毫秒数。 若要使用此功能,必须使用项目设计器(将My.Application.MinimumSplashScreenDisplayTime属性设置为两秒)将初始屏幕添加到应用程序,或在重写My.Application.MinimumSplashScreenDisplayTimeOnInitialize方法的方法中设置OnCreateSplashScreen该属性。 有关详细信息,请参阅 MinimumSplashScreenDisplayTime

    2. OnCreateSplashScreen。 允许设计器生成初始化启动画面的代码。

      默认情况下,此方法不执行任何操作。 如果在 Visual Basic 项目设计器中为应用程序选择一个启动画面,设计器会用一个将OnCreateSplashScreen属性设置为启动画面窗体的新实例的方法来替代SplashScreen方法。

  2. OnStartup。 提供用于引发 Startup 事件的扩展点。 如果此函数返回 False,应用程序启动序列将停止。

    默认情况下,此方法将引发 Startup 事件。 如果事件处理程序将 Cancel 事件参数 True的属性设置为,该方法将返回 False 以取消应用程序启动。

  3. OnRun。 提供在初始化完成后,主应用程序准备好开始运行时的起点。

    默认情况下,在进入 Windows 窗体消息循环之前,此方法将调用 OnCreateMainForm (创建应用程序的主窗体)和 HideSplashScreen (关闭初始屏幕)方法:

    1. OnCreateMainForm。 为设计器提供一种用于发出初始化主窗体的代码的方法。

      默认情况下,此方法不执行任何操作。 但是,在 Visual Basic 项目设计器中为应用程序选择主窗体时,设计器会用将属性设置为OnCreateMainForm主窗体的新实例的方法替代MainForm该方法。

    2. HideSplashScreen。 如果应用程序定义了初始屏幕并且它处于打开状态,此方法将关闭初始屏幕。

      默认情况下,此方法将关闭初始屏幕。

  4. OnStartupNextInstance。 提供一种方法来定制单实例应用程序在启动另一个实例时的处理方式。

    默认情况下,此方法将引发 StartupNextInstance 事件。

  5. OnShutdown。 提供用于引发 Shutdown 事件的扩展点。 如果在主应用程序中发生未经处理的异常,则此方法不会运行。

    默认情况下,此方法将引发 Shutdown 事件。

  6. OnUnhandledException。 如果上述任一列出的方法中发生未经处理的异常,将执行相应的操作。

    默认情况下,只要未附加调试器并且应用程序正在处理UnhandledException事件,此方法将引发UnhandledException事件。

如果应用程序是单实例应用程序,并且应用程序已在运行,则应用程序的后续实例在应用程序的原始实例上调用 OnStartupNextInstance 该方法,然后退出。

构造 OnStartupNextInstance(StartupNextInstanceEventArgs) 函数调用属性 UseCompatibleTextRendering 来确定要用于应用程序表单的文本呈现引擎。 默认情况下,该 UseCompatibleTextRendering 属性返回 False,指示使用 GDI 文本呈现引擎,这是 Visual Basic 2005 和更高版本中的默认值。 可以重写UseCompatibleTextRendering属性以返回True,该属性表明使用GDI+文本呈现引擎,这是Visual Basic .NET 2002和Visual Basic .NET 2003中的默认设置。

配置应用程序

作为 Visual Basic 应用程序模型的一部分,该 WindowsFormsApplicationBase 类提供配置应用程序的受保护属性。 应在实现类的构造函数中设置这些属性。

在默认的 Windows 窗体项目中,项目设计器 会创建代码以通过设计器设置来配置属性。 仅当应用程序启动时,才使用这些属性;在应用程序启动后设置它们不起作用。

资产 确定 项目设计器的“应用程序”窗格中的设置
IsSingleInstance 应用程序是作为单实例还是多实例应用程序运行。 “创建单个实例应用程序 ”复选框
EnableVisualStyles 如果应用程序将使用与 Windows XP 匹配的视觉样式。 “启用 XP 视觉样式 ”复选框
SaveMySettingsOnExit 如果应用程序在应用程序退出时自动保存应用程序的用户设置更改。 “关闭时保存 My.Settings” 复选框
ShutdownStyle 导致应用程序终止的原因,例如启动窗体关闭或最后一个窗体关闭时的情况。 关闭模式 列表

另请参阅