2012-05-04 94 views
0

我正在向我的winform添加啓動畫面。我閃屏就是另一種形式,其中,啓動畫面從未完全加載,然後關閉

this.Text = ""; 
this.ControlBox = False; 

所有這一切都是在形式是用的BackgroundImage一個PictureBox和

this.BackgroundImageLayout = BackgroundImageLayout.Center 

和進度是遞增值,直到我的MainForm初始化做完了。

我使用Show而不是ShowDialog來打開Splash。那麼,ProgressBar完美的工作,但PictureBox中的BackgroundImage似乎永遠不會加載。我看到的只是帶有ProgressBar的白色背景。

我使用SplashScreen.Show()中增加ProgressBar的同一方法,並且此方法在從MainForm的構造函數調用的方法中調用。

我已經嘗試在單獨的線程中使用SplashScreen.Show,但導致相同的問題。任何幫助將不勝感激,如果需要,我願意提供更多信息。

解決:

當在自己的線程的ShowDialog開始就必須使用,因爲當線程結束展將關閉的形式,但與ShowDialog的,該線程將保持運行,直到窗體關閉。感謝大家的幫助。

回答

3

我的猜測是你阻止了消息隊列,但沒有看到更多的代碼,我不能確定。

你可能想看看這個啓動畫面項目。我之前使用過它。很棒。

http://www.codeproject.com/Articles/5454/A-Pretty-Good-Splash-Screen-in-C

除其他事項外,該項目運行在一個單獨的線程啓動畫面以保持其響應和防止消息隊列阻塞。

+1

聽起來像這樣。你將需要產生一個新的線程,或者在後臺加載,或者如果加載發生在前臺,則處理消息隊列。 – Will

+0

我實際上已經嘗試在單獨的線程中使用Show(),但它仍然無法工作。什麼時候繪製背景圖像?在InitializeComponent()中? –

+1

自從我做了WinForms已經有一段時間了,但是圖像可能是爲了響應控件捕獲的窗口消息而繪製的,並且需要重繪自己。如果您阻止了消息隊列,則控件將不會收到該消息。 –

1

問題是您的啓動畫面顯示在主線程上,然後立即執行初始化應用程序的其他工作,並且從未有機會畫出啓動畫面。

你需要在自己的線程上運行你的啓動畫面,以便它能夠清晰地繪製。請參閱http://msdn.microsoft.com/en-us/library/aa446493.aspx