1

サーバー(データベースまたはインターネット)からのデータを待っている間にハングする可能性のあるアプリケーションを設計しています。問題は、時間がかかる可能性のあるさまざまな場所に対処するための最善の方法がわからないことです。

アクセスが行われている間、ユーザーに「読み込み中」ダイアログを表示できてうれしいですが、理想的には、これが短時間の操作で上にフリックして消えないようにします。

Microsoft Wordは、ボタンをクリックして操作に時間がかかるかのように、これを非常にうまく処理しているように見えます。数秒後に「動作中..」ダイアログが表示されます。操作はまだ同期しており、操作を中断することはできません。ただし、同じ操作がすぐに発生した場合は、明らかにダイアログが表示されません。

汎用のバックグラウンドワーカースレッドハンドラーを考案できてうれしいです。データ処理の99%はすでに静的アトミックメソッドで行われていますが、可能であれば、これについてベストプラクティスを実行したいと思います。

誰かがパターン、コード、または提案を持っているなら、私はそれらすべてを歓迎します

乾杯

4

3 に答える 3

3

私は間違いなく、2つのイベントを持つパターンを使用して非同期的に考えるでしょう。最初の「イベント」は、データを待機する必要がある場所/時間帯から実際にデータを取得することです。2番目のイベントは遅延タイマーです。このタイマーが作動する前にデータを取得すれば、すべてが順調に進んでいます。そうでない場合は、「忙しい」というポップアップを表示して、リクエストをキャンセルできるようにします。通常、キャンセルとは、最終的に応答を受け取ったときに「無視する」という意味です。

于 2010-02-15T19:02:13.280 に答える
1

Microsoft Wordは、ボタンをクリックして操作に時間がかかるかのように、これを非常にうまく処理しているように見えます。数秒後に「動作中..」ダイアログが表示されます。操作はまだ同期しており、操作を中断することはできません。ただし、同じ操作がすぐに発生した場合は、明らかにダイアログが表示されません。

これがあなたの望む振る舞いなら...

これは、BackgroundWorkerの周りにクラスをラップすることで、かなり簡単に処理できます。DoWorkイベントの開始と、最初の進捗レポートまでの時間を計ります。一定の時間が経過すると、ダイアログを表示できます。それ以外の場合は、ブロックします(短いプロセスであるため)。

そうは言っても、非同期で処理できる作業をしているときはいつでも、そのようにすることをお勧めします。たとえ短くても、目立った間隔でUIをブロックしない方がはるかに便利です。これは、タスク並列ライブラリを使用することにより、.NET 4(またはRxフレームワークを使用する3.5)ではるかに簡単になります。

于 2010-02-15T19:07:05.810 に答える
0

理想的には、UIのロックを回避するために、バックグラウンドスレッドまたは非同期のいずれかでIOまたは非UI処理を実行する必要があります。

于 2010-02-15T19:01:31.670 に答える