2010-12-07 74 views
0

在我正在編寫的應用程序中,我必須在按下某個按鈕後在列表視圖中加載大量數據。因爲這可能需要一段時間,我想向用戶顯示一個簡單的加載屏幕。 我通過創建一個帶有1個標籤的非常簡單的表單來完成此操作。我在開始獲取數據之前做了一個Form.Show(),並在完成之後做了一個Form.Close()。這部分工作:我得到加載屏幕,它在正確的時間關閉,但正如你所看到的標籤不顯示。C#標籤在加載屏幕上不顯示

我知道我應該在BackgroundWorker的幫助下編寫這個loagind screen-problem,但我不是一個非常有經驗的C#程序員,所以如果我能以某種方式強制顯示標籤,我會更加高興。

是否可以強制該標籤立即顯示,還是必須找到其他解決方案?

Screenshot

+0

可能是一個愚蠢的問題,但 - 你有沒有設置label1.Visible = true?它位於可以看到的窗口的一部分嗎?文字顏色與背景顏色相同嗎? – 2010-12-07 08:34:41

回答

3

的UI消息泵沒有及時更新標籤/刷新屏幕,因爲加載過程中佔用的所有資源。

您可以嘗試強制更新標籤,通過調用Application.DoEvents()。儘管使用'Application.DoEvents'是一種'代碼味道',因此表明設計不太好。所以,應該避免。

因此,使用DoEvents確實不是解決此問題的最佳解決方案。這只是一個症狀修復。

您已經提到過最好的解決方案:使用另一個線程來加載所有數據。 (你確實可以使用BackGroundWorker來達到這個目的,因爲這會抽象出很多管道代碼)。

+1

要避免Application.DoEvents()。 – 2010-12-07 08:45:13

3

BackgroudWorker是非常容易使用,甚至C#是非常強大的,簡單langugage

See Here

我幾乎可以肯定的是,你不會需要BackgroundWorker的更多的幫助,但如果你有任何疑問,你可以隨時發佈SO? Collabartive Intelligence是什麼?