0

私は大きなプロジェクト (30 の開発されたクラス) を持っており、そのためのローディング バーを作成したいと考えています。現在の進行状況と合計の進行状況バーがあります。また、現在のプロセスで何が起こっているかを大まかに説明する必要があります。

私が行った方法は、手動で(嫌いな人は嫌いです)最も貪欲なプロセスを経て、どれくらいの時間がかかるかを見積もりました(forループの場合は、反復ごとにステップアップします)。

Background_Worker の方がはるかにスムーズであると読みましたが、読み進めていくと、コードのすべてのチャンクに移動して、プログレス バーをインクリメントしたいと言う必要があるように思えました (私がしなければならないという考えそれは私にとって意味のあるプロセスを説明しています)。

だから私の質問は、プログレスバーの時間を自動的に割り当てる「ブロック」にメソッドをカプセル化する方法はありますか? または、私がしていることをより効率的に行う方法はありますか?

4

3 に答える 3

1

最善の方法は、メイン処理を別のスレッドに配置して、GUI が過負荷にならないようにし、GUI スレッドでプログレス バーを実行する (またはバー用の別のスレッドも作成する) ことです。 )。すべては好みによります。

しかし決して!!UI をフリーズします。ユーザーは、それが死んだと思って、強制的に閉じようとします。

于 2013-05-27T14:52:11.710 に答える
0

おそらく、進行状況バーを備えたバックグラウンド ワーカーです。グローバル変数を使用して進行状況を保存します。

public class SomeClass
{
   public int Progress { set; get; }

   public void Method1() 
   {
      ...
      Progress++; 
   }

   public void Method2() 
   {
      ...
      Progress++; 
   }

   ...
}

各メソッドが呼び出されるたびに、進行状況をインクリメントし、バックグラウンド ワーカーを呼び出して進行状況を報告します。

これにはもっと良い解決策があることは知っていますが、これは単なるアイデアです。

于 2013-05-14T02:12:50.003 に答える
0

プログレスバーの時間を自動的に割り当てる「ブロック」にメソッドをカプセル化する方法はありますか?

  • いいえ、進行状況バーは進行状況を表示するためのものです。そのため、開始終了、および現在の状態の値を外部 (呼び出し元から) に設定する必要があります。これは、実行される内容を呼び出し元だけが知っており、潜在的にそれを制御できるためです。

  • はい、無限バーを視覚化すると、アクションの実行に関する定量的な情報をユーザーに提供するのではなく、何かが起こっていることをユーザーに知らせることができます。また、現在のアクションに基づいて変化するテキストの説明を提供することもできるため、ユーザーは「そこで何かが起こっている」ことを確認できます。

UX の観点から悪いことは何もありません。ユーザーは統一されたままになり、何かを実行している UI の前で混乱しますが、これは明確ではありません。

したがって、どちらのアプローチも優れています。

于 2013-05-13T20:51:56.630 に答える