2011-02-02 9 views
0

私は小さな質問をしましたスレッドの後のコールバック。開始()が終了しましたか?

私はWPFアプリケーションを持っていますが、1回の方法では(WCFサービスを通じて情報を送信する)何度かかかります。私はGUIスレッド以外のスレッドでこれをやりたい

問題:

GUIは、WCFサービスと通信の新しいトランザクションマネージャを与えるデータストアに尋ねるサービス、、、へお願いします。

データストアオブジェクトには、オーナーとしてのGUIスレッドがあります。

public void MyMethod(abcdef){ 
//Income with the GUI thread 
//Launch a thread with my action which tooks times 
//update my objects with the result(Has to be done with the GUI thread) 

しかし、私はXYZ.Dispatchを行うか、起動またはBeginInvokeをすることができた上でここにはGUI要素をしましたしない:

は、私は、トランザクションマネージャでは、このような何かを、したいと思います。しかし私が始めたら、私はGUIのスレッドリファレンスを知っています。問題は、私はスレッドの所有者例外を持つつもりだということです。

Iいくつかの制約をしました:私は、データストアが非GUIデータストア

  • を持っていることを設定することはできません

    • 私は
    • ここに始まる呼び出しを行うためのGUIオブジェクトを持つことができない私は、この呼び出しを必要とします私は非GUIスレッド

    の結果は、あなたがそれを行う方法についてのアイデアを持っていますか必要

  • を非ブロックしていますか?

    ありがとうございました!

  • 答えて

    1

    Dispatcher.BeginInvoke()を使用してください。

    この方法では、GUIスレッド上で実行されるパラメータ付きの関数を実行できます。 WPFウィンドウのDispatcherプロパティをバックグラウンドワーカーに渡し、そのインスタンスのBeginInvokeメソッドを使用して通信します。

    +0

    右!しかし、私はApplication.Current.Dispatcherでそれを行う必要がありました:) – J4N

    +0

    それは依存します。 1つのスレッド(ほとんどの場合、あなたがいる)にWPF画面しか表示されていないときは、 'Application.Current.Dispatcher'を使用しても問題ありません。しかし、WPFで複数のUIスレッドを生成することは可能です。その場合、あなたのウィンドウの 'Dispatcher'を取ってそれを使って通信しなければなりません。これにより、メッセージが正しいスレッドに戻ってきます。 –

    関連する問題