我保持一個較舊的WinForms應用程序,其中第一窗口需要3-5秒鐘的加載,由於數據庫查詢,數據網格的自定義和加載大量數據英寸加載在後臺窗口,直到告訴它顯示
我應該添加一個前臺屏幕,用戶可以在這個舊窗口和尚未實現的新功能之間進行選擇。
因此,除了重構了一些數據庫查詢和其他舊的代碼,我想這樣做是爲了提高該窗口的加載時間:
- 用戶進入前屏幕
- 慢加載窗口開始加載,就像現在一樣,但隱藏在另一個線程的後臺,而前臺窗口處於活動狀態。如果在用戶實際點擊按鈕打開窗口之前窗口已經完全加載,那麼它仍然應該隱藏。
- 如果用戶點擊按鈕打開窗口,它會立即顯示,因爲它已經加載並準備就緒。
這是我有:
private void startBackgroundLoading()
{
var myThread = new Thread(openSlowLoadingWindow);
myThread.SetApartmentState(ApartmentState.STA);
myThread.Start();
}
private void openSlowLoadingWindow()
{
System.Windowns.Forms.Application.Run(new SlowWindow());
}
我使用Application.Run(),因爲上面所示的兩個窗口(前屏幕和緩慢的加載)在不同的項目。
很明顯,上面的代碼會啓動新線程,並在完成加載時向我顯示窗口,但如上所述,我想告訴它何時實際顯示自己。
我試過幾種方法在後臺運行新線程,隱藏窗口和其他各種東西。
我對編程相對比較陌生,所以如果我從完全錯誤的角度來攻擊它,請告訴我如何改進。
我被綁定到.net 4.0,所以新的異步/等待的東西不是一個選項。
最好的問候,埃裏克
我想只是聲明並顯示它正常的方式將工作? SlowWindow win = new SlowWindow(),然後在你想要實際顯示它時調用SlowWindow.Show()。 –
構造函數或window_loaded事件中的加載代碼是否緩慢? –
這當然不能解決任何問題,它的加載速度也很慢。你可以任意*先*顯示窗口,然後*在工作線程中運行查詢。這也不會讓它變得更快,它看起來更好,但它也是不可用的。通過創建更好的UI來解決您的問題。沒有任何情況下,人類會喜歡犁過數據量的數據,而這些數據會產生幾秒鐘的查詢執行時間。 –