我正在寫一個WinForms窗口在C#中顯示約12 ListBox
和6 ComboBox
控制每個有幾百到幾千項。顯示請等待動畫,而用戶界面填充
需要一段時間來填充這些。時間不長 - 只需幾秒鐘,但用戶有興趣看一下,這樣他們就知道程序在等待的時候在後臺工作。
我有一個通用的「Please Wait」動畫無邊界頂部窗口,當這種情況發生時出現,但是我在動畫方面遇到了問題。
對於那些需要一點時間的大部分任務,我解決這個問題的方式如下:
Program.ShowPleaseWait(); // Show top-most animation
Thread t = new Thread(stuffToDo); // Run stuffToDo() in separate thread
t.Start();
While (t.IsAlive)
Application.DoEvents(); // Run message queue, necessary for animation
Program.HidePleaseWait(); // Hide top-most animation
,它工作得很好。有時線程中的東西需要調用某些東西,有時會導致動畫中出現小的呃逆,但這通常不是什麼大問題。
但是,通過這種形式,線程中的整個代碼都是UI代碼:填充ListBoxes和ComboBoxes。這意味着所有的東西都必須包含在Invoke塊中,這沒有任何意義,因爲沒有必要讓它首先在單獨的線程中運行。
除了爲這個特殊情況報廢整個工作線程,並在每個循環中每隔幾百次插入一個Application.DoEvents()
,我有什麼辦法可以在控件填充時允許工作動畫繼續?
工程很棒。感謝那! – Ozzah
事實上,我已經完成並替換了我的代碼的所有實例以使用您的方法。 – Ozzah
@Ozzah:很高興你發現它很有用。 –