2

我试图在一个类中使用 Main () 函数来控制我的 vb .net Windows Forms 应用程序中的程序流。我添加了一个启动屏幕组件和一个登录屏幕,并自定义了我的主 sdi 表单。我已将启动表单设置为我在项目设计器的应用程序页面中的主要功能,并且一切似乎都工作正常(ish)。

但是,我想使用: Me.MinimumSplashScreenDisplayTime = 5000

以确保启动屏幕可见,但系统无法识别它,除非我勾选项目设计器上的启用应用程序框架复选框。如果我这样做,在启动时程序会忽略登录和启动屏幕以及我的所有自定义设置,并且只显示默认的 Form1,即使我还在 AF 下拉列表中指定了启动屏幕。

当然,还有其他方法可以延迟启动画面,例如让线程暂时进入睡眠状态(这似乎不起作用),但我怀疑 AF 中还有其他我可能想要使用的东西。

关于如何解决这个问题的任何建议,并获得控制程序流程的明智方法?关于组织程序流程的最佳整体结构的任何想法也将有所帮助。随着应用程序变得更加复杂,我很担心走微软或替代自定义路线,这可能会在以后给我带来问题。

谢谢。

* 更新 *

你好,我们又见面了。我已经尝试了这两个答案,并将 Hans Passant 的这个答案合并到我的代码中,并最终解决了所有错误消息。但是,它并没有解决问题,因为我的启动画面没有保持打开 5 秒。似乎只有在使用应用程序框架时才能访问 MS 启动屏幕和最短显示时间代码,并且我正在尝试生成自己的自定义启动,因为我想从模块/类函数开始,而不是表单。任何(更多)想法?谢谢。

4

2 回答 2

1

尝试这个:

Protected Overrides Function OnInitialize( _
    ByVal commandLineArgs As _
    System.Collections.ObjectModel.ReadOnlyCollection(Of String) _
) As Boolean
    ''# Set the display time to 5000 milliseconds (5 seconds). 
    Me.MinimumSplashScreenDisplayTime = 5000
    Return MyBase.OnInitialize(commandLineArgs)
End Function

这是从 MSDN 网站上删除的。

于 2010-04-30T11:37:53.583 回答
1

您应该能够使用 Startup 事件在 Sub Main() 中执行您想要执行的操作。项目 + 属性,应用程序选项卡,向下滚动,单击查看应用程序事件。左上组合,选择“(我的应用程序事件)”。右上组合,选择启动。

尽管如此,您仍然可以通过 Sub Main() 获取应用程序框架并启动它。将模块添加到您的项目并使其如下所示:

Imports Microsoft.VisualBasic.ApplicationServices

Module Module1
  Sub Main(ByVal args() As String)
    Dim app As New MyApp
    app.Run(args)
  End Sub
End Module

Class MyApp
  Inherits WindowsFormsApplicationBase
  Public Sub New()
    Me.SplashScreen = New SplashScreen1()
    Me.MinimumSplashScreenDisplayTime = 5000
  End Sub
  Protected Overrides Sub OnCreateMainForm()
    Me.MainForm = New Form1()
  End Sub
End Class
于 2010-04-30T11:40:35.163 回答