2011-03-08 107 views
-1

我想暫停並顯示我的啓動畫面,當程序加載時的片刻。我如何讓我的vb.net winform暫停幾秒鐘

我如何能做到這一點在vb.net的WinForms ...

+1

暫停將是一個非常糟糕的主意 - 你希望你的應用程序的啓動是* *慢比它通常會是什麼? – 2011-03-08 08:29:44

回答

1

快速和骯髒的解決方案:

  1. 顯示啓動畫面形式。
  2. 使用Thread.Sleep(請注意,在此期間不會進行UI更新,因此如果您的用戶在某處單擊,您的啓動畫面可能看起來很難看)。
  3. 關閉啓動畫面表單。

尼斯溶液:

  1. 顯示啓動畫面形式(沒有用戶可以用它來關閉窗體UI元素)。
  2. 在窗體中使用一個計時器控件來超時「片刻」。
  3. 定時器到期時關閉閃屏窗體。

用戶友好的解決方案:

  1. 顯示啓動畫面形式。
  2. 讓你的程序做一些有用的工作。
  3. 關閉啓動畫面表單。

請注意,啓動畫面通常用於以下目的:當程序正在完成一些工作時,它們招待用戶。如果你的程序不需要做初始工作,初始屏幕只是很煩人,因爲它浪費了用戶的時間。

+0

我喜歡定時器控件的解決方案 – KoolKabin 2011-03-18 07:30:25

2

好吧,假設你的主窗體被稱爲Form1,並且你的Load/Slow初始化工作是在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 
+0

對於涉及線程的解決方案。我們現在唯一缺少的是關閉閃屏的選項。 – 2011-03-08 09:09:35