我有一個視覺複雜的應用程序,包含大量用戶界面組件和第三方控件。在啓動時,隨着所有內容都調整大小並在Form_Load中載入內容(但主要是由於調整大小),它會進入瞬間的連接狀態。使用Winforms應用程序進行響應式啓動
所以我認爲解決方案可能是在Form_Load事件的開始時隱藏表單,然後在最後顯示它。但是,事實證明,當代碼進入Form_Load事件時,表單已經可見。
如何確保在準備就緒和調整大小時顯示錶單。
我有一個視覺複雜的應用程序,包含大量用戶界面組件和第三方控件。在啓動時,隨着所有內容都調整大小並在Form_Load中載入內容(但主要是由於調整大小),它會進入瞬間的連接狀態。使用Winforms應用程序進行響應式啓動
所以我認爲解決方案可能是在Form_Load事件的開始時隱藏表單,然後在最後顯示它。但是,事實證明,當代碼進入Form_Load事件時,表單已經可見。
如何確保在準備就緒和調整大小時顯示錶單。
Load
事件在UI線程上執行。你不應該把邏輯處理放在UI線程中,因爲阻止它使UI不響應。
您應該分叉一個新線程(請參閱Thread
類)並在那裏執行啓動邏輯。如果花費大約3秒鐘以上,則可能需要加載屏幕。您需要使用Form.Invoke()
和委託來執行與UI線程交互的任何邏輯(例如更改文本框的文本)。
在您假設Load
事件發生在窗體顯示時也是不正確的。 Load
事件發生在組件初始化之後和顯示錶單之前,然後在顯示錶單時發生Shown
事件。
這類似於這太問題有一個公認的答案: Single Form Hide on Startup
相關促進窗口此MSDN鏈接形成的表現也可能會幫助你很多: http://msdn.microsoft.com/en-us/magazine/cc163630.aspx
你的假設是不完全正確:Form_Load(或者更準確地說:加載事件處理程序)在第一次顯示錶單時執行。確實,在這一點上你的表單已經可見,雖然不可用,因爲你的線程被你的FormLoad函數阻塞了。
你有兩個選擇: