4

非 UI スレッドから RIA サービスを呼び出そうとしています。
新しいスレッドを開いてバックグラウンドワーカーを呼び出しましたが、どちらの場合もコールバックは UI スレッドで実行されています。
UIではなく、呼び出し元のスレッドでコールバックを実行することは可能ですか?
ありがとう

4

1 に答える 1

5

tl;dr

  • WCF を使用する
  • 結果を自分で UI スレッドにマーシャリングする

WCF RIA は、UI スレッドで動作するように構築されています。

WCF RIA は、主に UI スレッドで動作するように設計されています。それには明らかに多くの長所と短所があります。あなたの場合、主に短所。このデザインの決定的なドキュメントを見つけるのに苦労していますが、トピックに関するほとんどの質問は、UI のスレッド化を確認することで解決されます。

Domain Context Load と SubmitChanges は非同期で実行されます。それらはスレッド プールからスレッドを取得し、サーバーに対して必要な呼び出しを行います。これらの呼び出しが完了すると、作業は自動的に UI スレッドに戻されてエンティティ コレクションが変更され、その後 UI が更新されます (おそらく INotificationChanged を介して)。

WCF を使用して独自のデータを取得する場合は、任意のスレッドで実行できます。呼び出しが完了したら、クロススレッド例外を回避するために、UI スレッドで UI を更新するコードを作成 (または借用) する必要があります。

IMO、単純な問題に単純な解決策を与えるWCF RIAの主な利点:

  • サーバーとクライアントの間でコードを再利用するための優れたツール
  • サービスとクライアントのコードは常に互換性があります
  • クライアント/サーバーとの間のデータ転送は比較的簡単です
  • WCF RIA は非常に独断的であるため、学習しやすいコーディング パターンが得られます。

短所は、困難な問題を困難または不可能にします。

  • WCF RIA は非常に独断的であり、その意見に従わないことは苦痛または不可能です
  • すべての操作が UI スレッドに返されるため、多くの場合、パフォーマンスの問題が発生します
  • クライアントとサーバーのコードを最大限に再利用するためのブードゥー教があります。
于 2012-08-15T17:47:43.827 に答える