2010-12-13 17 views
1

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

+0

幸運。 (報告)の進展は難しい – SLaks

答えて

0

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

作業の進捗状況を報告するには、作業単位が完了したときにイベントを発生させる作業が必要です。そのイベントはUIレイヤーで処理され、進捗インジケーターが更新される必要があります。

開始するには、BackgroundWorker(ここにはMSDNの例 - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)があります。 BackgroundWorkerに慣れたら、アプリケーションにどの変更を加える必要があるかを判断するのに適しています。

0

サーバコードを変更して、サーバシグネチャを変更せずにサーバ側で進捗情報を更新し、この情報を個別に照会できる別の方法を使用できます。

これにより、サーバーへの既存の呼び出しに何の影響も与えずに、進捗状況のサポートを後付けすることができます。UIの新しいバックグラウンドスレッドを追加して、長時間の実行中の進行中の情報を確認します。

編集:クライアントで実行されるタスクでも同じアプローチが有効だと思います。しかし、静的な進捗インジケータクラスもここでも使用できます。

1

グレッグが述べたように、今後多くの作業があります。しかし、問題に近づくには多くの方法がありますが、クライアントからアプリケーション/データベース層にコンテキスト情報がどのように伝わるかによって、最適なものが決まります。たとえば、セッショントークンまたはトランザクション識別子が、通常、クエリ/トランザクションまたはアプリケーションからクライアントに非同期に戻される確認応答を実行する通常の過程でクライアントからアプリケーションに渡された場合、進捗報告が必要だった場合、アプリケーションがクライアントが照会できる状態テーブルを更新するようにすることができます。これにより、必要な再作業の量を減らすことができます。基本的には、「ミドルウェア」をすでに使用しているとみなし、それを利用して階層間のトランザクションを関連付けることができるかどうかを確認する必要があります。

関連する問題