更新:2007 年 11 月
您可以通过重写 WindowsFormsApplicationBase 类的 Overridable 成员来向应用程序模型添加功能。可以使用此方法自定义应用程序模型的行为,并添加在应用程序启动和关闭时需调用的自己的方法。
应用程序模型的图形概述
本节以图形的方式呈现 Visual Basic 应用程序模型中的函数调用序列。下一节将详细描述每个函数的用途。
以下图形显示了在普通的 Visual Basic Windows 窗体应用程序中的应用程序模型调用序列。当 Sub Main 过程调用 Run 方法时序列开始。
.gif)
Visual Basic 应用程序模型也提供 StartupNextInstance 和 UnhandledException 事件。以下图形显示了有关引发这些事件的机制。
.gif)
.gif)
重写基方法
My.Application.Run 方法定义 Application 方法的运行顺序。默认情况下,Windows 窗体应用程序的 Sub Main 过程调用 Run 方法。
如果应用程序是普通应用程序(多实例应用程序),或者是单实例应用程序的第一个实例,则 Run 方法按照以下顺序来执行 Overridable 方法:
- OnInitialize。默认情况下,该方法设置视觉样式、文本显示样式和主应用程序线程的当前主体(如果应用程序使用 Windows 身份验证)。如果既未使用 /nosplash 也未使用 -nosplash 作为命令行参数,则该方法还会调用 ShowSplashScreen。 - 如果此函数返回 False,则取消此应用程序的启动序列。如果存在不应该运行应用程序的情况,则这种取消行为很有用。 - OnInitialize 方法调用下列方法: - ShowSplashScreen。确定应用程序是否定义了初始屏幕;如果定义了初始屏幕,则在单独的线程中显示初始屏幕。 - ShowSplashScreen 方法包含显示初始屏幕的代码,显示时间至少为由 MinimumSplashScreenDisplayTime 属性指定的毫秒数。若要使用此功能,必须使用“项目设计器”(将 My.Application.MinimumSplashScreenDisplayTime 属性设置为两秒钟)向应用程序添加初始屏幕,或者在重写 OnInitialize 或 OnCreateSplashScreen 方法的方法中设置 My.Application.MinimumSplashScreenDisplayTime 属性。有关更多信息,请参见 My.Application.MinimumSplashScreenDisplayTime 属性。 
- OnCreateSplashScreen。允许设计器发出初始化初始屏幕的代码。 - 默认情况下,此方法不执行任何操作。如果在 Visual Basic 的“项目设计器”中为应用程序选择初始屏幕,则设计器会使用一个方法(该方法将 SplashScreen 属性设置为初始屏幕窗体的新实例)来重写 OnCreateSplashScreen 方法。 
 
- OnStartup。提供用于引发 Startup 事件的扩展性点。如果此函数返回 False,则停止此应用程序的启动序列。 - 默认情况下,此方法引发启动事件。如果事件处理程序将事件参数的 Cancel 属性设置为 True,则此方法将返回 False 以取消应用程序的启动。 
- OnRun。提供在初始化完成之后并且主应用程序准备开始运行时的起始点。 - 默认情况下,在进入 Windows 窗体消息循环之前,此方法调用 OnCreateMainForm(用于创建应用程序的主窗体)和 HideSplashScreen(用于关闭初始屏幕)方法: - OnCreateMainForm。为设计器提供用于发出初始化主窗体的代码的方法。 - 默认情况下,此方法不执行任何操作。但是,如果在 Visual Basic 的“项目设计器”中为应用程序选择主窗体,则设计器会使用一个方法(该方法将 MainForm 属性设置为主窗体的新实例)来重写 OnCreateMainForm 方法。 
- HideSplashScreen。如果应用程序定义了初始屏幕并且初始屏幕处于打开状态,则此方法关闭初始屏幕。 - 默认情况下,此方法将关闭初始屏幕。 
 
- OnStartupNextInstance。提供了一种方法,用于自定义当单实例应用程序的另一个实例启动时该应用程序的行为方式。 - 默认情况下,此方法引发 StartupNextInstance 事件。 
- OnShutdown。提供用于引发 Shutdown 事件的扩展性点。如果主应用程序中出现未处理的异常,则此方法不会运行。 - 默认情况下,此方法引发关闭事件。 
- OnUnhandledException。如果上面所列的任何一种方法中出现未处理的异常,则执行此方法。 - 默认情况下,只要未附加调试器且应用程序正在处理 UnhandledException 事件,此方法就将引发 UnhandledException 事件。 
如果应用程序是单实例应用程序且已经在运行,则此应用程序的后续实例将对它的最初实例调用 OnStartupNextInstance 方法,然后退出。
WindowsFormsApplicationBase 构造函数调用 UseCompatibleTextRendering 属性以确定用于应用程序窗体的文本呈现引擎。在默认情况下,UseCompatibleTextRendering 属性返回 False,指示使用 Visual Basic 2005 中默认的 GDI 文本呈现引擎。可以重写 UseCompatibleTextRendering 属性以返回 True,指示使用 Visual Basic .NET 2002 和 Visual Basic .NET 2003 中默认的 GDI+ 文本呈现引擎。
配置应用程序
WindowsFormsApplicationBase 类是 Visual Basic 应用程序模型的一部分,它提供用于配置应用程序的受保护属性。这些属性应该在实现类的构造函数中设置。
在默认的 Windows 窗体项目中,“项目设计器”创建代码,以利用设计器设置来设置属性。这些属性仅在应用程序正在启动时使用;在启动之后设置这些属性没有效果。
| 属性 | 确定 | 使用项目设计器进行设置 | 
|---|---|---|
| 应用程序作为单实例应用程序运行还是作为多实例应用程序运行。 | ||
| 应用程序是否将使用 XP 视觉样式。 | ||
| 应用程序是否在退出时自动保存它的用户设置方面的更改。 | 在“项目设计器”的“应用程序”窗格中选中“关机时保存 My.Settings”复选框。 | |
| 哪种情况导致应用程序终止,例如当主窗体关闭时或当所有窗体关闭时。 | 
请参见
概念
参考
My.Application.StartupNextInstance 事件
My.Application.UnhandledException 事件