Хорошо, представьте, что ваша основная форма называется Form1, а дорогая / медленная инициализация выполняется в Load, а форма заставки называется Splash.
Вы бы хотели что-то вроде следующего:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim StartTime = DateTime.Now
Dim Splash = New System.Threading.Thread(AddressOf SplashThread)
Splash.Start()
'Do lots of initialization - you wouldn't have this sleep in the real application
System.Threading.Thread.Sleep(10000)
Dim EndTime = DateTime.Now
Dim Diff = EndTime - StartTime
If Diff.TotalSeconds < 5 Then
'Splash hasn't been shown for very long - a little sleep is warranted.
System.Threading.Thread.Sleep(New TimeSpan(0, 0, 5) - Diff)
End If
SplashForm.Invoke(New Action(AddressOf SplashForm.Close))
Splash.Join()
End Sub
Private SplashForm As Splash
Private Sub SplashThread()
SplashForm = New Splash()
Application.Run(SplashForm)
End Sub