3

「アクティブなオブジェクト」のコレクションがあります。つまり、定期的に自分自身を更新する必要があるオブジェクトです。次に、これらのオブジェクトを使用して、WPF ベースの GUI を更新する必要があります。

以前は、各オブジェクトに独自のスレッドを含めるだけでしたが、それは、明確に定義されたライフサイクルを持つ有限数のオブジェクトを操作する場合にのみ意味があります。現在、フォームで必要な場合にのみ存在するオブジェクトを使用しているため、ライフサイクルは予測できません。また、データベースと Web サービスの呼び出しを行う多数のオブジェクトを使用することもできます。

通常、更新間隔は 1 秒ですが、タイムアウトにより最大 30 秒かかる場合があります。

では、どのデザインがお勧めでしょうか?

4

3 に答える 3

1

アクティブなオブジェクトのすべてまたはグループに対して 1 つのディスパッチャー (スケジューラー) を使用できます。Dispatcher は、優先度の高いタスクを最初に処理し、次に他のタスクを処理できます。長期実行アクティブ オブジェクトに関するこの記事とコードを参照して、その方法を確認できます。さらに、Half Sync/Half Async パターンを確認することをお勧めします。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2010-02-09T08:53:53.863 に答える
0

私は専門家ではありませんが、オブジェクトがいつ変更されたかを示すイベントを発生させるだけです。GUI は、イベントを受信するたびに、必要な部分を更新できます (データ バインディングと INotifyPropertyChanged を使用すると簡単です)。

于 2010-01-26T03:37:48.690 に答える
0

可能であれば、ある種のデータバスを一般化して、オブジェクトが「アクティブ」になったら、更新するオブジェクトのリストに自分自身を追加するようにします。オブジェクトがデータベースに支えられている場合は特に、このパターンを使用したいと思います。オブジェクトごとに 1 つのクエリを実行する代わりに、複数のクエリを集約できるからです。

特定のオブジェクトのリスナーがなくなった場合、大したことではなく、データはどこにも行きません。

コア アップデーター コードは、1 つのタイマー (または複数、または適切なもの) を使用して、いつ更新を取得するかを決定できます。これをより多くのデータフローとして実行し、「状態の更新」を少なくすると、おそらく最終的に多くの正気を保つことができます。

于 2010-01-26T04:46:15.347 に答える