C# アプリケーションの読み込み率を計算する方法を教えてください。ロードされたアプリケーションのパーセンテージを示すプログレス バーを含むスプラッシュ スクリーンを表示したいと考えています。
そのための標準的なメソッド\ライブラリはありますか、それともフォームロードコードのさまざまな時点で進行状況バーの値を更新する必要があります。
または、アプリケーションのプリローダーに関するチュートリアルを教えてください
C# アプリケーションの読み込み率を計算する方法を教えてください。ロードされたアプリケーションのパーセンテージを示すプログレス バーを含むスプラッシュ スクリーンを表示したいと考えています。
そのための標準的なメソッド\ライブラリはありますか、それともフォームロードコードのさまざまな時点で進行状況バーの値を更新する必要があります。
または、アプリケーションのプリローダーに関するチュートリアルを教えてください
ユーザーがアプリケーションを初めて起動するときは、10 秒かかると想定し、プログレスバーにその 10 秒のカウントダウンを表示します。アプリケーションが読み込まれたら、アプリケーションの読み込みにかかった実際の時間をユーザーのコンピューターのどこかに保存します。次にユーザーがアプリケーションをロードするときは、元の 10 秒ではなく、保存された時間を使用します。
これは単純明快なコンセプトです。ユーザーは、アプリケーションのどの部分がロードされているかは気にしません。ロードにかかる時間を気にし、カウントダウンを見たいと思っています。
いずれにせよ、個々のステップにかかる時間をかなり正確に推測する必要があります。そうして初めて、実際に意味のある進行状況バーを表示できます。ロードプロセスをいくつかのステップに分割することで概算できます。時間的にはほぼ同じであると想定し、それらのステップを完了すると進行状況を計算します。
別の方法として、プログレス バーを表示するのではなく、一連の読み込み手順をテキストまたはグラフィックで表示することもできます。KDE は起動時にこれを行うと思います。こうすることで、進行状況を示しますが、進行状況バーに対するユーザーの期待を回避できます (これは、進行状況バーが直線的に進行しているか加速している場合に最適です。頻繁に停止したりジャンプしたりすると、プロセスが非常に遅いという印象を与えるだけです)。
別のオプションは、プログラムの起動を高速化し、実行時に必要なものをロードすることで、スプラッシュ スクリーンを完全になくすことです。これは、あなたやあなたのプログラムにとってオプションである場合とそうでない場合がありますが、起動時間とプログラム速度の全体的な印象が大幅に改善される可能性があります.
これを行う最も簡単な方法は、スタートアップ フォームの Load イベントの開始時にスプラッシュ フォームのインスタンスを作成することです。スプラッシュ フォームで、その ProgressBar をパブリック プロパティとして公開します。スプラッシュ フォームを作成したら、その ProgressBar の Maximum プロパティを、Load イベント コードで識別できる個別のステップ数に設定し、.Show() メソッドを呼び出して表示します (もちろん、.ShowDialog() ではありません)。
Load イベントの各ステップが完了するたびに、パブリックな ProgressBar の Value プロパティをインクリメントするだけです。すべての手順が完了したら、スプラッシュ フォームを閉じて破棄します。
スタートアップ フォームに多数のコントロールが含まれている場合、ロードアップ時間のかなりの割合が、Load イベントの前に呼び出されるフォームのコンストラクターで実際に費やされるため、これは適切に機能する場合と機能しない場合があります。すべての初期化コードをコンストラクターに移動し、そこからスプラッシュ スクリーンを作成して表示するのが最適な場合があります。
まず、スプラッシュ画面が表示され、プログラムが開始され、いつでも制御できるようになるという錯覚をユーザーに与えます。
次に、プログレス バーを表示する場合は、実行するタスクの数を正確に計算する必要があります。次に、すべての項目の完了後にラベルloading xxxxxx.......
とインクリメント プログレス バーを表示します。
起動時間を最適化する問題に関しては、主にアプリケーションの機能に依存します。
アプリが PIM であると仮定すると、今日のイベントとタスクを読み込み、ユーザーにすばやく表示してから、他のデータの読み込みを開始できます。
Treeview を使用してオブジェクト階層を表示しなければならないアプリケーションがありましたが、各ノードには無制限の数のアイテムを含めることができました。トップレベルのオブジェクトをロードしてツリービューに表示し、マーカーを配置しました(実際には、ノードのタグに*を入れました。これは、.netの本や以前に読んだが覚えていた記事から学んだことです)ノード直下の子をロードしました。