Public
Sub New()
Sub New()
MyBase.New()
Me.Cursor = Cursors.AppStarting
Dim frm As New SplashForm
frm.FormBorderStyle = FormBorderStyle.None
frm.MaximizeBox = False
frm.MinimizeBox = False
frm.StartPosition = FormStartPosition.CenterScreen
frm.ControlBox = False
frm.ShowInTaskbar = False
frm.ShowDialog()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
'
'加载图书类型至TreeView
PopulateBookType()
Me.Cursor = Cursors.Default
End Sub
MyBase.New()
Me.Cursor = Cursors.AppStarting
Dim frm As New SplashForm
frm.FormBorderStyle = FormBorderStyle.None
frm.MaximizeBox = False
frm.MinimizeBox = False
frm.StartPosition = FormStartPosition.CenterScreen
frm.ControlBox = False
frm.ShowInTaskbar = False
frm.ShowDialog()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
'
'加载图书类型至TreeView
PopulateBookType()
Me.Cursor = Cursors.Default
End Sub
一个比较好的解决方案就是使用Thread,这里SplashForm保持不变,需要增加一个SplashFormContainer类用以实现线程操作,显示和隐藏SplashForm,代码如下:
Imports
System.Threading
' SplashForm包装类,用于实现
' 线程操作
' 显示/隐藏SplashForm
Public Class SplashFormContainer Class SplashFormContainer
Private m_thr As Thread
Private m_splashform As SplashForm
Sub New()Sub New()
m_thr = New Thread(AddressOf Show)
m_thr.Start()
End Sub
Private Sub Show()Sub Show()
m_splashform = New SplashForm
m_splashform.ShowDialog()
End Sub
Public Sub Close()Sub Close()
m_thr.Join()
End Sub
End Class
' SplashForm包装类,用于实现
' 线程操作
' 显示/隐藏SplashForm
Public Class SplashFormContainer Class SplashFormContainer
Private m_thr As Thread
Private m_splashform As SplashForm
Sub New()Sub New()
m_thr = New Thread(AddressOf Show)
m_thr.Start()
End Sub
Private Sub Show()Sub Show()
m_splashform = New SplashForm
m_splashform.ShowDialog()
End Sub
Public Sub Close()Sub Close()
m_thr.Join()
End Sub
End Class
另外主窗体需要作如下修改:
Dim
splashContainer
As
SplashFormContainer
Public Sub New() Sub New()
MyBase.New()
'显示Splash Screen
Dim splashContainer = New SplashFormContainer
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
'加载图书类型至TreeView
PopulateBookType()
Me.StartPosition = FormStartPosition.CenterScreen
Thread.Sleep(1000)
'关闭Splash Screen
splashContainer.Close()
Me.Cursor = Cursors.Default
End Sub
Public Sub New() Sub New()
MyBase.New()
'显示Splash Screen
Dim splashContainer = New SplashFormContainer
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
'加载图书类型至TreeView
PopulateBookType()
Me.StartPosition = FormStartPosition.CenterScreen
Thread.Sleep(1000)
'关闭Splash Screen
splashContainer.Close()
Me.Cursor = Cursors.Default
End Sub
总结:
通过线程的使用可以实现在SplashForm显示的同时,完成窗体初始化的工作。
VB.Net 2005中提供了对Splash Screen的内置支持,看来有不少人遇到了同样的问题,并且Microsoft意识到了该问题并把它解决了。