2009-12-20 119 views
2

我在VB.Net中編寫了一個啓動屏幕,顯示3秒鐘,然後顯示登錄屏幕。但即使登錄顯示並且我已經告訴飛濺隱藏,飛濺也會顯示出來。這裏是我的代碼:初始屏幕問題

Public Class frmSplash 

    Private Sub frmSplash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Me.Show() 
     System.Threading.Thread.Sleep(3000) 
     Me.Hide() 
     frmLogin.Show() 
    End Sub 
End Class 
+1

爲什麼你想這樣做?對於最終用戶來說,只要程序啓動,沒有比毫無意義的三秒鐘等待更讓人討厭的事了。如果您在後臺加載程序的其餘部分,則只應顯示啓動畫面。 – SLaks 2009-12-20 17:41:35

+0

在某些程序中,啓動畫面是信息性的,它可能會提醒用戶程序版本,程序的創建者或其他有用的信息。但我同意,如果你爲了展示它而展示它,那麼它有點毫無意義。 – Cyclone 2009-12-20 17:44:53

+0

這是關於對話框的用途。 – SLaks 2009-12-20 17:45:26

回答

2

在UI線程中調用Thread.Sleep會凍結你的程序。

另外,Load事件在表單顯示之前觸發,因此您在首先顯示錶單之前調用Hide

你需要一個Timer組件添加到窗體,設置其Interval3000,並在其Tick事件致電Close。然後,以形式Shown事件調用計時器的Start方法。

+0

這是我的理解,如果您在Load事件中放置'.Show',它將在加載事件結束之前顯示。但是,如果提問者使用'Shown'事件,或者在顯示錶單之後觸發它,則可能會更好。 – Abel 2009-12-20 17:37:26

+0

你有一點。但是,在'Sleep'調用期間不會處理Windows消息,因此表單不會被繪製,並且可能根本不可見。 – SLaks 2009-12-20 17:39:52

+0

或者,使用Application.DoEvents()可以工作,如果可以讓它在暫停時觸發。 – Cyclone 2009-12-20 17:47:08

0

您的sleep語句凍結了您的UI,請嘗試從另一個線程運行它。

+0

這裏要做的正確的事情是使用WinForms計時器;它會比創建線程更有效率。 – SLaks 2009-12-20 17:40:31

+0

我將如何使用計時器來做到這一點? – 2009-12-20 17:41:13

+0

@Mark:看到我的回答。 – SLaks 2009-12-20 17:42:05

0

謝謝你們!這工作: 公共類frmSplash

Private Sub frmSplash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    SplashTimer.Start() 
End Sub 

Private Sub SplashTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SplashTimer.Tick 
    SplashTimer.Stop() 
    frmLogin.Show() 
    Me.Hide() 
End Sub 
End Class