独自の WCF サービスを作成し、Silverlight クライアント経由で正常に通信できました。ただし、非同期コールバックで興味深い問題に遭遇しました。コールバックが呼び出されると、恐ろしい無効なクロス スレッド アクセスで UI コントロールを更新できません
私のコールバック関数は次のようになります
private void GetTimeCallBack( object sender, Talk.ClientBase<IService>.ClientEventArgs e )
{
lblDisplay.Text = e.Object.ToString();
}
簡単なグーグル検索で、代わりにこれをしなければならないことがわかりました。
private void GetTimeCallBack( object sender, Talk.ClientBase<IService>.ClientEventArgs e )
{
Dispatcher.BeginInvoke( () => lblDisplay.Text = e.Object.ToString() );
}
これですべて正常に動作しますが、コールバックが別のスレッドで実行されるとは思っていませんでした。クラス内で何かを変更するには、常に Dispatcher クラスを使用する必要がありますか? それとも、これは UI 要素に限定されていますか? 私は Dispatcher クラスにまったく慣れていないので、もっと理解したいと思っています。