2009-08-29 39 views
0

我如何計算我的C#應用​​程序的加載百分比。我想顯示一個啓動畫面,顯示一個顯示應用程序加載百分比的進度條。C#Winform應用程序預加載器啓動畫面

是否有任何標準方法\庫,或者我將不得不更新我的表單加載代碼中不同點的進度欄值。

或者可以在任何給我上的應用程序預加載的教程

回答

2

可能最簡單的方法是在啓動窗體的Load事件開始時創建啓動窗體的實例。在飛濺形式中,將其ProgressBar公開爲公共屬性。創建初始窗體後,將其ProgressBar的Maximum屬性設置爲您可以在Load事件代碼中識別的離散步驟的數量,然後通過調用其.Show()方法(當然不是.ShowDialog())來顯示它。

隨着Load事件中的每一步完成,您只需增加公共ProgressBar的Value屬性。當所有步驟完成後,關閉飛濺表單並進行處置。

這可能會也可能不會正常工作,因爲如果您的啓動窗體包含大量控件,則總載入時間的很大百分比實際上將花費在窗體的構造函數中,這將在Load事件之前調用。最好將所有的初始化代碼移到構造函數中,並從那裏創建並顯示啓動畫面。

2

那麼,在任何情況下,你需要在你的各個步驟需要多長時間一個相當準確的猜測。只有這樣你才能給出一個真正有意義的進度條。您可以通過將您的加載過程分成幾個步驟來近似它,假設您的時間大致相同,並在完成這些步驟時計算進度。

另一種方法是不顯示進度條,而是顯示一系列加載步驟,用文本或圖形表示。我認爲KDE在啓動時會這樣做。這樣,你可以顯示進度,但避免用戶對進度條的期望(如果進度條是線性進展或加速的話,效果最好;如果頻繁停止並跳轉,它只會產生非常緩慢的進程的印象)。

另一種方法是通過嘗試快速啓動程序並在運行時加載所需內容來完全消除啓動畫面。這可能會也可能不是您或您的程序的選項,但它可以在啓動時間和程序速度的總體印象方面顯示出相當顯着的改進。

+1

所以我只能用這些aanswers得到的是進度條實際上是我們自己的邏輯運算不喜歡已經被加載X%的人認爲應該在內存中加載的代碼。 – Moon 2009-08-29 20:41:52

1

首先,Splash屏幕顯示給用戶一個錯覺,即程序已經啓動,並且隨時都會處理控件。

其次,如果你想顯示進度條,那麼你需要準確計算你執行的任務的數量。然後顯示標籤loading xxxxxx.......並在完成每個項目後遞增進度條。

至於優化啓動時間的問題,它主要取決於您的應用程序的功能。

假設你的應用程序是一個PIM,那麼你可以加載今天的事件和任務,並快速顯示給用戶,然後開始加載其他數據。

我曾經有一個應用程序,我必須使用Treeview顯示對象層次結構,每個節點可以有無限數量的項目。我加載了頂層對象,然後在樹形視圖中顯示並放置標記(實際上我把*放在節點的標記中,這是我從一些.net書或文章中學到的,很久以前我曾經讀過但記得),當點擊我加載了直接的子節點。

3

用戶首次啓動應用程序時,假定需要10秒鐘,並顯示進度條倒計時10秒。加載應用程序後,在用戶計算機的某個位置保存加載應用程序所用的實際時間。下次用戶加載您的應用程序時,使用保存的時間而不是原來的10秒。

這是一個簡單明顯的概念。用戶不關心應用程序的哪些部分正在加載,他關心需要多長時間,他希望看到倒計時。

+1

+1不是我聽過的最糟糕的主意。 :) – MusiGenesis 2009-08-29 20:50:30

+1

和你值得upvoting競爭回答:)的徽章 – 2009-08-30 05:25:18

相關問題