日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中制作启动窗体的方法和问题

發布時間:2023/12/20 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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#中制作启动窗体的方法和问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。