2012-03-21 9 views
0

本来、独自のメッセージキューを実装しているアプリケーションがあります。ユーザーがアプリケーションと対話すると、ActionDispatcherによって処理される.NETクラスではなく、カスタムアクションであるアクションが生成されます。UIアクセスが必要な複数のスレッドの処理

ActionDispatcherクラスには、CustomActionオブジェクトのスタックがあります。 ActionDispatcherを独自のスレッドで実行したいと思いますが、InvokeとBeginInvokeを使用してメインのUIスレッドと通信する際のすべての問題があります。

ActionDispatcherが呼び出すことのできるメソッドがいくつかありますが、それぞれが私が信じている他のスレッドと通信するためにUI側のデリゲートが必要です。よりシンプルな方法がありますか?

別個のスレッドを必要とするのは、ActionDispatcherがサーバーとUIから発生したメッセージを処理するからです。これはクライアントアプリケーションであり、多くのアクションがサーバーによって生成されます。 UIとサーバーの両方にメッセージを追加する独自のキューがあるとします。

答えて

0

本当にアプリケーションのアーキテクチャによりますが、すばやく簡単な答えは次のとおりです。UIスレッドでない場合、DispatherのInvokeまたはBeginInvokeメソッドを使用してアクセスまたは実行する必要がありますUIスレッドにコードを戻します。

これは、WinFormsとは少し異なります.WinFormsのパースペクティブから来ているように思えるので、WPFディスパッチャーを参照してください。

一方、私はあなたがプリズムのIEventAggregatorのようなものを調べることをお勧めします。私は他の同様の実装があると確信していますが、Prismには素晴らしい機能があります。イベントに登録してUIスレッドに入り、プリズムが残りの作業をしてくれます。

個人的には、私はEventAggregatorパターンを使用する方が良いと思いますが、それは必ずしも単純ではありません。

関連する問題