マルチ層アプリケーションを設計して、進行状況バーを使用します

StackOverflow https://stackoverflow.com/questions/4425587

  •  09-10-2019
  •  | 
  •  

質問

C#には、データベースでタスクを実行することになっているマルチティアアプリケーションがあります(初めて使用する場合は、データベースを作成してデータで入力する場合があります)。私が最初にアプリケーションを設計したとき、私はあらゆる種類の進捗状況の報告は言うまでもなく、可能性のある進捗バー制御を考慮しませんでした。データベース操作の進行状況をUIレイヤーに報告できるように、アプリケーションの設計を変更するにはどうすればよいですか?再利用可能なソリューションはありますか?また、すべての機能を変更するように強制して、レポートの追加の入力を取得することはできませんか?

役に立ちましたか?

解決

いいえ。アプリケーションの大きさに応じて、先に多くの作業があります。

進捗報告が機能するには、作業単位が完了したときにイベントを提起するために作業を実行しているコードが必要です。そのイベントは、更新されたUIレイヤーと進行状況インジケーターで処理する必要があります。

開始するのに適した場所は、バックグラウンドワーカーの使用を検討することです(ここにMSDNの例があります - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)。バックグラウンドワーカーに精通したら、アプリケーションにどの変更を加える必要があるかを決定するために、より良い立場にいるはずです。

他のヒント

グレッグが言ったように、先に多くの仕事があります。ただし、問題に取り組むには多くの方法があり、最善の方法は、クライアントからアプリケーション/データベースレイヤーに既に渡されるコンテキスト情報によって異なります。たとえば、セッショントークンまたはトランザクション識別子がクライアントからクライアントからアプリケーションを実行する通常のコースでクライアントからアプリケーションに渡された場合、またはクライアントに非同期に渡された確認リファレンスは、それらのクエリ/トランザクションの場合に渡されます。進捗報告が必要でした。クライアントがクエリできるステータステーブルをアプリケーションに更新することができます。これにより、必要な再加工の量が減る可能性があります。基本的に、「ミドルウェア」を既に検討し、そのいずれかを活用してトランザクションを介してトランザクションを相関させることができるかどうかを確認する必要があります。

サーバーコードを変更して、(関数署名を変更せずに)サーバーエンドで進行状況情報を更新し、この情報を個別に照会できる個別のメソッドを作成できます。

これにより、サーバーへの既存の呼び出しに影響を与えることなく、進捗状況のサポートを改造することができ、UIに新しい背景スレッドを追加して、長期走行タスクが進行中に更新された進行状況情報をチェックします。

編集:クライアントで行われるタスクでも同じアプローチが機能すると思います。それでも、ここでも静的な進行状況インジケータクラスを使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top