有没有办法将启动画面扩展为窗体显示的事件?

时间:2014-08-28 16:28:12

标签: vb.net splash-screen

我最近正在处理此错误:BeginInvokeStackflowError

我正在使用线程,根据我的研究,这是因为在线程.start()事件中它调用.invoke。如果在mainform_Load事件中完成,则在准备好之前,您会收到BeginInvoke错误。

所以我将代码从加载移动到显示的事件。但是,后台有很多东西我不想让用户看到。在我的代码中是否有一种方法来扩展启动画面我必须等到显示的主窗口第一次完成?

 Private Sub MainWindow_Shown(sender As Object, e As EventArgs) Handles Me.Shown
    'update table /search network       
    updateTable()
    'clean 
    cleanupTable()
    'fix label 
    updateLabel()
End Sub

2 个答案:

答案 0 :(得分:1)

您的应用可以默认启动" MainForm" VB Application Framework提供的方法。这将使用Sub Main作为起点,允许您控制显示的内容和时间,以及之前发生的事情:

' IF your form is declared here, it will be
' available to everything. e.g.:
' Friend mainfrm As Form1

Public Sub Main()
    ' this must be done before any forms/controls are referenced
    Application.EnableVisualStyles()

    ' the main form for the app
    ' just "mainfrm = New Form1" if declared above
    Dim mainfrm As New Form1

    ' eye candy for the user
    Dim splash As New SplashScreen1
    splash.Show()

    ' your code here to do stuff.
    ' you can also invoke your procedures on the main form
    ' mainfrm.FirstTimeSetup()

    ' for demo purposes
    System.Threading.Thread.Sleep(2500)

    ' close/hide the splash once you are done
    splash.Close()
    ' see note

    ' start the app with the main form
    Application.Run(mainfrm)

End Sub
  • 将一个模块添加到项目中,通常是" program"
  • 添加您的Sub Main
  • 转到“项目属性”,取消选中“使用Application Framework”
  • 在StartUp对象下拉列表中选择Sub Main

如果您将启动画面声明为顶部的朋友,则可以真正扩展它,直到所有表单的加载事件完成并在那里关闭它。

答案 1 :(得分:0)

如果您已使用项目设置实现了启动屏幕,则无法扩展启动屏幕,但是您可以使用启动屏幕窗体作为初始窗体而不是主窗体。至于等待线程完成以显示表单(或隐藏启动画面),请考虑在主窗体中使用公共布尔值,并在线程完成后将其更改为True。您可以在初始屏幕上使用计时器来检查此布尔变化,然后将表单的不透明度更改回1.