C#中制作启动窗体的方法和问题
C#中制作啟動窗體的方法和問題??
2009-10-17 00:33:17|??分類:?程序|舉報|字號?訂閱
下載LOFTER我的照片書??|
?????? 在開發windows桌面程序時,經常碰到的一個問題就是:在主窗體顯示之前,需要加載大量數據,這樣,當用戶啟動程序后,需要等待一段時間才可以看到主窗體。好的程序設計人員會為軟件加上一個啟動窗體,并在后臺執行加載數據的代碼,典型的應用如VS系列、PhotoShop等軟件。用戶一旦運行程序,首先看到的是啟動窗體以及窗體上顯示的相關信息,以避免用戶產生啟動程序后沒有反應的誤解。
?????? 比如我的主窗體名稱是MainForm,啟動窗體名稱是SplachForm,在顯示MainForm之前需要加載大量數據,那么可以先顯示SplachForm,并在上面以文字或進度條的形式顯示數據加載的情況,用戶知道應用程序在做什么,也就可以耐心等待了。
?????? 簡單的做法是修改Application.Run()方法的參數,把主窗體改為SplachForm,當數據加載完成時,隱藏SplachForm,顯示MainForm。這里不可以關閉SplachForm,因為C#中,關閉Application.Run方法中調用的窗體對象,將會退出整個應用程序。
?????? 上面這個做法的缺點是不可以在MainForm中使用Close方法來退出程序,因為SplachForm只是隱藏,程序是無法退出的,必須使用Application.Exit()方法來退出整個應用程序。
?????? 稍好一點的做法是,Application.Run方法的參數仍然是MainForm對象,在MainForm窗體的構造函數中添加以下代碼:
???????SplachForm form=new SplachForm();
?????? form.ShowDialog();
?????? 在SplachForm的Load事件中添加代碼:
???????this.Show();
???????this.Refresh();
?????? Init();????? //加載數據的方法
?????? this.Close();
?????? 這樣主窗體仍然是MainForm,并且在加載完數據后自動顯示MainForm。
?????? 這個做法雖然簡單,但實際效果并不差。不過只適用于啟動窗體消失后必然顯示MainForm窗體的情況,如果在啟動窗體消失后,因為某種原因需要退出程序,效果就不行了,無論怎么處理,主窗體仍然會被顯示,即使把上面的this.Close()改成Application.Exit(),主窗體也會顯示一下才退出程序。這是因為Application.Run方法的特性造成的,它使調用的窗體可見,并在退出程序時返回到調用的地方。
?????? 更好的做法是使用線程技術,把啟動窗體和主窗體分為不同線程,先創建啟動窗體的線程,在完成加載數據的方法后,創建主窗體的線程,同時關閉啟動窗體線程。例如啟動窗體加載數據之后,需要顯示登錄窗體,并根據用戶的登錄情況來決定是否顯示主窗體,用這種方式實現就非常好。當用戶登錄失敗或放棄登錄時,不創建主窗體線程,退出程序,不會出現第二種方法的情況。需要注意的是,在VS2005以上的版本中,有一個線程調用安全的問題。
?????? 三種方式都用過,第一種簡單,效果不太好。第二種也簡單,在只有啟動窗體并在啟動窗體完成后直接進入主程序的情況下,效果也不錯。第三種稍為麻煩,但可以處理的情況更多,如在主窗體顯示之前要顯示多個窗體,目前我只能用第三種方法來實現。第三種方法的代碼較多,懶得打字貼代碼了,記上一筆,以免日后又忘了……
總結
以上是生活随笔為你收集整理的C#中制作启动窗体的方法和问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高效办公必备神器-Keychron键盘,
- 下一篇: C#开发DIY照片书软件(C#图形图像开