2011-12-20 51 views
9

私は、次のテクノロジを使用するプロジェクトに取り組んでいる:私は現在、非同期呼び出しを作ってるんだワーカースレッド内からUIスレッドのメソッドを呼び出す方法は?

  • C#(.NET 4.0)
  • WCF
  • PRISM 4

プロキシによって生成されたBegin/Endメソッドを使用してWebサービスの1つに転送します。呼び出しは成功し、クライアントはワーカースレッド上でWebサービスの応答を受け取ることができます。

応答が受信されると、イベントが発生します。イベントに加入したクラスは、PRISMを使用してUIのナビゲーションを要求するために進ん:

Application.Current.Dispatcher.BeginInvoke(new Action(() => 
    this.RegionManager.RequestNavigate(RegionNames.LoginContentRegion, projectSelectionViewUri))); 

非同期のWCF応答がUIスレッド上で捕獲されていないので、私はApplication.Current.Dispatcher.BeginInvoke(...)を使用してUIスレッドを起動することを強制しています。

ここでの問題は、呼び出しが何もしないように見えることです。 UIは更新されず、例外もスローされません。

ワーカースレッドで発生したイベント内からUIスレッドを呼び出す方法はありますか。

編集:はず重複が答えを提供していないので、この質問は、以下のリンクで再頼まれました:

Request UI navigation using PRISM 4 on an asynchronous WCF response thread

+2

このスレッドはなぜ閉じたのですか?可能な複製はWPF Windowsを扱っておらず、ほぼ3歳ですが、これは一般的なテーマ(サイト全体)ですが、重複なしの可能な複製です。 –

+0

私はRamhoundに同意します... –

答えて

5

あなたはあなたが実際のUI上で起動されているようにする必要がありDispatcher必ずしもCurrentである必要はありません。 UI Dispatcherを渡すか、UIによってどこかで処理される何らかの形式のコールバックを持つことができます。

+0

UIディスパッチャを渡すにはどうすればいいですか? –

+1

いくつかのUI要素(つまり、 'UserControl')からそれを必要とするクラスを作成すると、' var someClass = new SomeClass(this.Dispatcher); 'のようなことができます。 –

+0

@HusseinKhalil - メインウィンドウの参照を送信できませんか? –