啓動畫面的概念並不會讓我覺得應該如此複雜,但我無法完成整個啓動畫面的繪製。製作啓動畫面
假設我有兩個System.Windows.Forms.Form
s:RealForm和SplashScreen。 RealForm包含最初的GUI。在RealForm加載過程中(即在Load
事件的事件處理程序中),RealForm創建到數據庫的連接,然後測試連接。這可能需要幾秒鐘,所以我做的這一切之前,我試着投了閃屏,像這樣:
private void RealForm_Load(object sender, EventArgs e)
{
SplashScreen splash = new SplashScreen();
splash.Show();
loadAndCheckDatabase();
splash.Close();
}
的問題是,閃屏僅被部分地拉伸,所以它並沒有真正看起來很像一個閃屏。任何想法爲什麼?我該怎麼辦?
對於獎勵積分,有沒有人知道在哪裏可以找到所有發生在典型的創建,使用和破壞形式的事件的解釋?上面的問題可能是因爲我不明白什麼順序的事情發生或掛鉤到表單事件。
UPDATE 關閉,但並不完全:尋找多一點的建議。下面是當前的代碼:
private SplashScreen splash = new SplashScreen();
private void RealForm_Load(object sender, EventArgs e)
{
splash.Show();
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
this.Visible = false;
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
splash.Close();
this.Visible = true;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
loadAndCheckDatabase();
}
不幸的是,this.Visible = false
沒有做任何事情,因爲它是在代碼中,我沒有控制自動設置爲true
。所以,爲了解決這個問題,我把this.Visible = false
放到表單的Shown
事件的處理程序中。但是,正如你可能猜到的那樣,你仍然可以在瞬間看到表格......所以這不是一個很好的解決方案。
有什麼辦法可以在工作線程上等待,而我仍然在Load處理程序中?
這可能很明顯,但請確保在loadAndCheckDatabase調用中沒有任何UI代碼,甚至沒有消息框,否則可能會遇到問題。 – 2010-08-13 16:45:32
我甚至不打擾Application.DoEvents(),只是使用BackgroundWorker。如果您想在UI保持響應時執行一個簡單的邏輯單元,請使用BackgroundWorker。如果您希望UI線程去執行在UI的消息隊列中等待的所有內容,* even *如果用戶設法排隊等待鼠標點擊,這些點擊會執行看起來像線程負載正在運行,但實際上只有一個,然後使用Application.DoEvents()。 – 2010-08-13 18:00:08